HEARTBEAT_PREFIX
HEARTBEAT_PREFIX = 'jobcenter:worker:hb:'
心跳缓存前缀
Worker 守护服务
职责:把 artisan queue:pause/resume/restart 的缓存信号机制界面化—— worker 每轮循环(Looping 事件)写心跳缓存,Web 端读心跳判定失联; 暂停/恢复/重启直接写 Laravel Worker 官方读取的缓存键, 界面点击即生效,全程无 shell 命令。
缓存键契约(与 Illuminate\Queue\Console\Pause/Resume/RestartCommand 同源): illuminate:queue:paused:{connection}:{queue} 暂停(Worker 按 (connection, queue) 逐队列消费) illuminate:queue:restart 重启(时间戳变化即平滑退出,supervisor 拉起) jobcenter:worker:hb:{pid} 实例心跳(TTL 60s,过期即失联) jobcenter:worker:list 实例注册表(pid → 元数据)
┌────────────────── 分区导航(按此顺序阅读)──────────────────┐ 分区 1 · 心跳与实例 heartbeat / registerInstance / removeInstance 分区 2 · 状态查询 status / paused 分区 3 · 界面控制 pause / resume / restart └────────────────────────────────────────────────────────────┘
start() : string
启动 worker:失联时界面一键拉起(不再依赖外部 supervisor)。
实现:proc_open 启动独立进程——exec/shell_exec/popen 在本机 PHP 均被 disable_functions 禁用,proc_open 是唯一可用通道;按平台分支:
cmd /c start "" /b 使 worker 脱离请求生命周期独立存活;nohup ... & 脱离终端后台运行(setsid 语义由 nohup 承担)。
stdout/stderr 重定向到 storage/logs/queue-worker.log(worker 每轮循环写心跳,
启动数秒后界面台账自动转「运行中」)。幂等:已有在岗实例(心跳未过期)直接提示,防重复点击双启。
同步模式无需 worker / 进程启动失败