Version: 0.9.71.dev.260504

后端:
1.阶段 5 task 服务边界落地
- 新增 cmd/task 与 services/task/{dao,rpc,sv},承载 task zrpc、tasks 表迁移和 task outbox 消费边界
- 新增 gateway/client/task、shared/contracts/task 和 task port,gateway /api/v1/task/* 切到 task zrpc client
- 将 task.urgency.promote.requested handler / relay / retry loop 迁入 cmd/task,单体 worker 不再消费 task outbox
- 保留单体 Agent 残留 task 查询的 publish-only 写入能力,避免迁移期 task 事件丢失
- active-scheduler task facts / due job scanner 切到 task RPC,并移除启动期 tasks 表依赖检查
- 更新阶段 5 文档,记录 task 切流点、旧实现保留、跨域 DB 依赖缩减和下一轮建议
- 补充 task rpc 示例配置
This commit is contained in:
Losita
2026-05-05 00:00:09 +08:00
parent 29b8cf0ada
commit 6843c7efac
27 changed files with 2552 additions and 146 deletions

View File

@@ -430,14 +430,18 @@ flowchart LR
### 4.9 阶段 5再拆 schedule / task / course / task-class
当前进展2026-05-04 首刀
当前进展2026-05-04
1. `schedule`开始服务化:新增 `cmd/schedule``services/schedule/{dao,rpc,sv,core}``gateway/client/schedule``shared/contracts/schedule``shared/ports` schedule port。
1. 首刀 `schedule`完成服务化:新增 `cmd/schedule``services/schedule/{dao,rpc,sv,core}``gateway/client/schedule``shared/contracts/schedule``shared/ports` schedule port。
2. gateway 的 `/api/v1/schedule/*` HTTP 门面已切到 schedule zrpc clientgateway 不再通过 `backend/service.ScheduleService` 直接承载 schedule HTTP 入口业务。
3. active-scheduler 的 schedule facts / feedback / confirm apply 已改为调用 schedule RPC adapter`cmd/active-scheduler` 启动依赖检查已移除 `schedule_events``schedules``task_classes``task_items`,迁移期仍直接读取 `tasks`
4. gateway schedule client 和 active-scheduler schedule RPC adapter 已接入 `Ping` 启动期健康检查;单体聊天主动调度 rerun 的 schedule facts / feedback / apply 也已切到 schedule RPCtask facts 暂时仍走 Gorm
5. 旧实现仍保留:`backend/service/schedule.go``backend/dao/schedule.go`、active-scheduler 旧 Gorm apply adapter 暂时保留,用于 agent 迁移期、单体残留路径和回退
6. 当前切流点HTTP schedule 流量进入 `cmd/schedule`active-scheduler 正式写日程进入 schedule 服务course / task-class / agent 内部仍存在直接 DAO 调用,后续按域继续切
3. active-scheduler 的 schedule facts / feedback / confirm apply 已改为调用 schedule RPC adapter`cmd/active-scheduler` 启动依赖检查已移除 `schedule_events``schedules``task_classes``task_items`
4. 第二刀 `task` 已开始服务化:新增 `cmd/task``services/task/{dao,rpc,sv}``gateway/client/task``shared/contracts/task``shared/ports` task port
5. gateway 的 `/api/v1/task/*` HTTP 门面已切到 task zrpc clientgateway 只负责鉴权、参数绑定、短超时和响应透传,不再直接调用 `backend/service.TaskService`
6. active-scheduler 的 task facts / due job scanner 已切到 task RPC adapter`cmd/active-scheduler` 启动依赖检查已移除 `tasks`,进一步缩小 active-scheduler 对跨域主库表的直接依赖
7. `task.urgency.promote.requested` 的 handler、relay、retry loop 已迁入 `cmd/task`;单体 outbox worker 只保留 agent / memory consumerAgent 残留查询链路只允许 publish-only 写入 `task_outbox_messages`,避免单体和 task 独立服务抢同一 task consumer group。
8. 旧实现仍保留:`backend/service/schedule.go``backend/dao/schedule.go``backend/service/task.go``backend/dao/task.go`、active-scheduler 旧 Gorm apply adapter 暂时保留,用于 agent 迁移期、单体残留路径和回退。
9. 当前切流点HTTP schedule 流量进入 `cmd/schedule`HTTP task 流量进入 `cmd/task`active-scheduler 读取 task/schedule facts 与正式写日程均走 RPCcourse / task-class / agent 内部仍存在直接 DAO 调用,后续按域继续切。
10. 当前残留跨域 DB 依赖task 服务迁移期仍 best-effort 写 `active_schedule_jobs`active-scheduler 仍直接写 agent 会话 / timeline 和 notification outbox 相关表agent 本地 task 查询链路仍保留旧 `TaskService` 作为迁移期适配。
目标:
@@ -448,7 +452,7 @@ flowchart LR
这一步要做的事:
1. `schedule` 先独立,再看 `task``course``task-class`
1. `schedule``task` 已先后独立;下一轮优先评估 `task-class`,再看 `course`
2. 每个领域只维护自己的写模型。
3. 通过事件或明确 RPC 契约通信。
4. 继续保持并行迁移,旧实现和新实现可以短期并存。
@@ -456,8 +460,8 @@ flowchart LR
建议提交点:
1. schedule 切流完成后 commit。
2. course / task-class 切流完成后 commit。
3. task 切流完成后 commit。
2. task 切流完成后 commit。
3. course / task-class 切流完成后 commit。
建议测试:
@@ -1080,7 +1084,17 @@ graph TD
3. `backend/gateway/api` 是 HTTP 门面统一目录,`backend/gateway/client/activescheduler` 是 gateway 侧 zrpc client。
4. `backend/shared/contracts/activescheduler``backend/shared/ports` 只承载跨层契约和端口接口,不承载服务私有业务实现。
5. `cmd/all` 不再启动 active-scheduler workflow / scanner / handler完整本地 smoke 需要同时启动 `cmd/all``cmd/userauth``cmd/notification``cmd/active-scheduler`
6. 迁移期仍共享主库访问 task、schedule、agent 会话和 notification outbox 相关表;active-scheduler 启动时做依赖表检查,后续由 schedule/task/agent 拆分继续缩小这条共享边界。
6. 阶段 4 收口时仍共享主库访问 task、schedule、agent 会话和 notification outbox 相关表;阶段 5 已先通过 schedule / task RPC 继续缩小这条共享边界。
阶段 5 当前基线:
1. `backend/cmd/schedule/main.go` 是 schedule 独立进程入口,`backend/cmd/task/main.go` 是 task 独立进程入口,二者各自初始化 DB / Redis / zrpc server 和所需服务内资源。
2. `backend/services/schedule` 拥有正式日程领域核心,`backend/services/task` 拥有任务池读写、完成/撤销、紧急性平移和 task outbox handler。
3. `backend/gateway/api` 继续作为 HTTP 门面统一目录,`backend/gateway/client/schedule``backend/gateway/client/task` 作为 gateway 侧 zrpc client。
4. `backend/shared/contracts/schedule``backend/shared/contracts/task``backend/shared/ports` 只承载跨进程契约与端口接口,不放 DAO、model 或业务状态机。
5. active-scheduler 的 schedule facts / feedback / confirm apply 已走 schedule RPCtask facts / due job scanner 已走 task RPC启动依赖检查不再要求 `schedule_events``schedules``task_classes``task_items``tasks`
6. `task.urgency.promote.requested` 的消费边界已迁入 `cmd/task`;单体 outbox worker 不再启动 task service bus只保留 Agent 残留路径的 publish-only 写入能力,避免迁移期重复 relay / consume。
7. 本阶段残留task 服务仍 best-effort 写 `active_schedule_jobs`agent 本地 task 查询、quick task 创建、course / task-class 仍存在直接 DAO 调用active-scheduler 旧 Gorm apply adapter 保留为迁移期残留,不作为新流量主路径。
---