浅浅升级一下
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 8m8s

This commit is contained in:
2026-05-06 14:41:14 +08:00
parent b0bd37ec12
commit 3a2e3f2571
16 changed files with 1490 additions and 106 deletions

View File

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