Files
huachuang/docs/superpowers/plans/2026-08-03-task-callback-mode.md

4.0 KiB
Raw Blame History

任务完成与取消双通道回调实现计划

面向 AI 代理的工作者: 在当前会话逐任务实现;步骤使用复选框跟踪。当前工作区存在用户改动,不自动提交、不覆盖无关文件。

目标: 实现 YAML 驱动的 MQ 异步与 Feign 同步完成/取消链路,并在业务成功后统一推进任务最终状态。

架构: Task 操作管理器负责配置分流execute starter 提供统一 Feign 业务入口MQ Consumer 在业务处理后回调 Task。最终状态仅由 TransportTaskCallbackService 收口更新。

技术栈: Java 17、Spring Boot、OpenFeign、RocketMQ、MyBatis、JUnit 5


任务 1补齐 execute starter 的完成与取消入口

文件:

  • 修改:nl-framework/nl-spring-boot-starter-execute/pom.xml

  • 修改:nl-framework/nl-spring-boot-starter-execute/src/main/java/cn/code/nl/framework/execute/biz/api/TaskCommonApi.java

  • 修改:nl-framework/nl-spring-boot-starter-execute/src/main/java/cn/code/nl/framework/execute/biz/api/AbstractTaskCommonApiImpl.java

  • 创建:nl-framework/nl-spring-boot-starter-execute/src/test/java/cn/code/nl/framework/execute/biz/api/AbstractTaskCommonApiImplLocalSpringTest.java

  • 编写 Spring 集成测试,调用 doHandleFinisheddoHandleCancelled 并断言测试任务处理器收到正确 taskId 与 payload。

  • 运行定向测试,确认因接口缺失而失败。

  • TaskCommonApi 和公共实现中增加两个接口,复用现有 execute 路由。

  • 重跑定向测试并确认通过。

任务 2增加 YAML 模式分流并统一同步状态收口

文件:

  • 创建:nl-module-task/nl-module-task-api/src/main/java/cn/code/nl/module/task/enums/TaskCallbackTypeEnum.java

  • 修改:nl-module-task/nl-module-task-server/src/main/resources/application.yaml

  • 修改:nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/manage/TransportTaskOperationManager.java

  • 修改:nl-module-task/nl-module-task-server/src/main/java/cn/code/nl/module/task/service/transporttask/TransportTaskCallbackServiceImpl.java

  • 定义 mqfeign 配置枚举及严格解析方法。

  • 为 Task 服务增加 nl.task.callback-type: mq

  • 将完成、取消共同的待处理状态保存后,按配置选择事务后发 MQ 或同步调用 TaskCommonApi

  • Feign 成功后构造成功回调请求并调用 TransportTaskCallbackService

  • 删除字符串状态码的错误格式化,直接使用枚举 code。

任务 3补齐 MQ 成功与失败回调

文件:

  • 修改:nl-module-lms/nl-module-lms-server/src/main/java/cn/code/nl/module/lms/mq/consumer/LmsTaskStatusChangeConsumer.java

  • 修改:nl-module-wms/nl-module-wms-server/src/main/java/cn/code/nl/module/wms/mq/consumer/WmsTaskStatusChangeConsumer.java

  • 完成或取消业务正常结束后,通过 TransportTaskApi.receiveCallbackResult 回调 SUCCESS 并检查返回结果。

  • 业务异常时回调 FAILED 记录异常信息,再抛出原异常触发 MQ 重试。

  • 未找到处理器时抛出异常,避免消息被确认后任务永久停留在待处理状态。

  • 统一事件标识并使用 Redis 成功标识隔离业务执行与成功回调重试。

任务 4验证与审查

文件:

  • 检查:以上全部生产与测试文件

  • 运行 execute starter 定向 Spring 集成测试。

  • 编译 execute starter、task-api、task-server、lms-server、wms-server 及依赖模块。

  • 检查 git diff确认没有覆盖工作区既有改动。

  • 按 Java 规范检查中文注释、@Resource 注入、Feign 返回值检查及异常日志。

最终验证结果

  • execute starter 4 个 Spring 定向测试通过。
  • task-api 3 个业务归属与 Topic 映射 Spring 定向测试通过。
  • Execute、Task、LMS、WMS 及依赖共 33 个模块编译通过。
  • 聚合启动工程 nl-server 及依赖共 38 个模块编译通过。
  • git diff --check 通过,仅有工作区行尾转换提示。