All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m8s
3.6 KiB
3.6 KiB
1. 配置与常量
- 1.1 在
pkg/constants/新增 Worker 角色常量:all、leader、consumer,并为所有导出常量添加中文注释 - 1.2 在
pkg/config/config.go新增WorkerConfig,字段包含Role和InstanceName - 1.3 在
Config中挂载Worker WorkerConfig,并在Validate()中校验worker.role只允许all、leader、consumer - 1.4 在
pkg/config/defaults/config.yaml新增worker.role: "all"和worker.instance_name: "" - 1.5 在
pkg/config/loader.go绑定worker.role和worker.instance_name环境变量 - 1.6 运行
lsp_diagnostics检查pkg/config/config.go、pkg/config/loader.go、新增常量文件无诊断错误
2. Worker 启动角色拆分
- 2.1 在
cmd/worker/main.go中读取cfg.Worker.Role和cfg.Worker.InstanceName,并输出当前角色和实例名称日志 - 2.2 将当前 Worker 启动流程整理为共享依赖初始化段,确保 Redis、PostgreSQL、Storage、Gateway、Asynq Client、
BootstrapWorker、PollingConfigManager、PollingQueueManager、PollingBase、PollingLifecycleService对所有角色都可用 - 2.3 为
all/leader启动PollingInitializer,并保留配置从空变为非空时触发Restart(ctx)的 WatchChanges 逻辑 - 2.4 为
all/leader创建并启动PollingScheduler,为consumer跳过调度器创建或启动 - 2.5 为
all/leader创建、注册并启动 Asynq Scheduler,注册现有order_expire、alert_check、data_cleanup、daily_traffic_flush定时任务;为consumer完全跳过 - 2.6 确保所有角色都创建 Asynq Worker Server、注册全部任务 Handler,并调用
workerServer.Run(taskHandler.GetMux()) - 2.7 启动日志输出已启用模块和已禁用模块,模块名包含
queue_server、polling_initializer、polling_scheduler、asynq_scheduler - 2.8 调整优雅关闭逻辑:只关闭当前角色实际启动过的 Asynq Scheduler 和 Polling Scheduler,所有角色都关闭 Worker Server
- 2.9 运行
lsp_diagnostics检查cmd/worker/main.go无诊断错误
3. 文档更新
- 3.1 更新
docs/environment-variables.md,新增JUNHONG_WORKER_ROLE和JUNHONG_WORKER_INSTANCE_NAME说明、默认值和示例 - 3.2 在
docs/environment-variables.md的 Docker Compose 示例中说明单实例默认all,多实例推荐1 leader + N consumer - 3.3 更新
docs/polling-system/performance-tuning.md的 Worker 多实例部署段落,明确禁止直接复制完整 worker,推荐扩展consumer - 3.4 对更新过的文档执行人工阅读检查,确认无“多个完整 worker 可直接多开”的歧义表述
4. 编译与人工验证
- 4.1 对修改过的 Go 文件执行
gofmt - 4.2 执行
go build ./cmd/worker,确认 Worker 入口编译通过 - 4.3 执行
go build ./...,确认项目整体编译通过 - 4.4 使用默认配置值检查
all模式日志预期:应显示启用queue_server、polling_initializer、polling_scheduler、asynq_scheduler - 4.5 使用
JUNHONG_WORKER_ROLE=leader检查日志预期:应显示与all相同的启用模块,并体现角色为leader - 4.6 使用
JUNHONG_WORKER_ROLE=consumer检查日志预期:应显示启用queue_server,禁用polling_initializer、polling_scheduler、asynq_scheduler - 4.7 使用非法角色值检查配置校验预期:
JUNHONG_WORKER_ROLE=invalid时启动失败,错误信息明确指向worker.role - 4.8 记录未覆盖风险:本期不包含 Redis Leader 锁、自动选主、任务唯一性去重,这些进入第二期增强