VNC 与业务调度隔离方案
目标
将 VNC Relay 生命周期从 Laravel 心跳任务中移出,并把支付后新购/续费队列与定时任务队列分开消费,避免长定时任务阻塞 provision 队列。
范围
- VNC Relay 改为独立命令/进程运行,心跳不再负责拉起 Relay。
- 业务队列保留
provision、通知、返佣和默认业务队列。 - 定时任务使用独立
automation队列,并与业务队列并行消费。 - 更新本地启动、部署与调度说明及回归测试。
回滚点
- 代码回滚:恢复
vnc-ensure-relay心跳任务和原单队列消费实现。 - 运维回滚:停止独立 VNC Relay,恢复原
schedule:run消费方式。 - 不涉及数据库迁移。
进度
- [x] 更新队列配置与定时任务队列归属
- [x] 实现业务/定时队列并行消费
- [x] 移除 VNC 对心跳的依赖并增加独立启动选项
- [x] 更新测试与运维文档
- [x] 完成后端定向测试、静态检查和文档检查
决策日志
- 2026-08-04:新购和续费的支付后履约继续使用
provision队列;隔离层放在队列 Worker,不改支付、订单和续费业务状态机。 - 2026-08-04:VNC Relay 不再由业务调度兜底拉起,采用独立进程托管;
vnc:ensure-relay保留为手工健康检查/修复命令。 - 2026-08-04:定向调度、履约和配置测试通过;全仓 PHPStan 存在 331 个既有错误,完整 PHPUnit 在本地环境长时间无输出后超时,保留为上线前需复核的验证项。
- 2026-08-04:并行 Worker 的互斥锁按业务与定时队列拆分,并在各自 Worker 退出时释放;避免长定时任务持有全局锁而延迟下一轮
provision消费。 - 2026-08-04:所有心跳任务统一从
queue.TURAIDC_SCHEDULE_QUEUE读取队列名;TURAIDC_SCHEDULE_QUEUE自定义值会同时应用于任务注册、心跳投递和手工触发。 - 2026-08-04:修复回归共通过 48 项、645 个断言;定向 PHPStan、Pint、文档检查与差异空白检查均通过。
