hongawen 886c02ff96 fix(mq-starter): 修复启动 fail-fast 校验 review 发现的缺陷(relaxed binding / 逃生开关 / redis 假地址)
workflow 多智能体 review 后修复:

- rocketmq 探测改用 Binder 读 rocketmq.name-server,与 driver(RocketMQProperties)同源、
  享受 relaxed binding,修复 camelCase(rocketmq.nameServer) 被误判为「未配置」而错误 fail-fast
- MqStartupChecks 逃生开关只认严格 false(忽略大小写/空白),缺省或非法值一律继续校验,
  不再因非法布尔值(如 enabled=disabled)抛类型转换异常炸掉启动
- redis 探测 target() 对 cluster/sentinel 回退到指向真实配置项的文案,
  不再假报使用者从未配过的 localhost:6379
- 补齐回归测试:camelCase 键 / 非法开关值继续校验 / host:port 提示分支 / cluster 回退
  (core 5、redis-stream 5、rocketmq 5,全绿)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 14:06:05 +08:00

mq-starter — 统一 MQ 抽象层("MQ 界的 JDBC"

一个独立、全平台通用的 starter。业务配一行 mq.type 选底层(rocketmq | redis-stream 只面向 starter 接口编程,不关心用哪个 MQ、不管理生产者消费者换 MQ = 改配置,业务代码一行不动。

  • 坐标 groupIdcom.njcn,版本 1.0.0-SNAPSHOTPhase 2 阶段本地 mvn install
  • JDK 1.8 / Spring Boot 2.3.12.RELEASE / META-INF/spring.factories 自动装配
  • 零业务依赖:不依赖 message-api 等任何业务模块

业务视角(对外契约)

mq:
  type: redis-stream      # 或 rocketmq
// 发
@Resource MqTemplate mq;
mq.send("LN_Topic", payload);
mq.send("File_Topic", nodeId, payload);   // 带路由 key

// 收(业务方法打注解,零 MQ 概念)
@MqListener(topic = "LN_Topic", group = "ln_consumer")
public void onFrontData(FrontData msg) { /* 纯业务 */ }

模块结构

模块 职责
mq-starter-core 门面 MqTemplate + @MqListener 注解扫描 + 中立信封 MqMessage + driver SPI + 生命周期
mq-starter-rocketmq rocket driver基于官方 rocketmq-spring 编程式注册)
mq-starter-redis-stream redis driver复用 redis-stream-springboot-starter 低层件,零改动 Phase 1
mq-spring-boot-starter 聚合 jar业务方只引这一个坐标

装配机制

@ConditionalOnProperty("mq.type") 静态二选一:两套 driver 各只在对应值下装配, 同一上下文只存在一个 MqDriver bean。

关联设计

  • 设计稿:cn-data-platform/docs/superpowers/specs/2026-06-25-mq-starter-design.md
  • 能力清单与轻量版范围:cn-data-platform/docs/2026-06-25-mq-starter能力清单与轻量版范围.html
  • 实现计划(轻量版 Phase 2cn-data-platform/docs/superpowers/plans/2026-06-25-mq-starter-轻量版-phase2.md
Description
No description provided
Readme 226 KiB
Languages
Java 100%