Skip to content

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、文档检查与差异空白检查均通过。

基于 AGPL-3.0-or-later 发布