hongawen 84034fb7d0 feat(mq-starter-redis-stream): 去重 TTL / reclaim idle 外置为 mq.redis-stream.* 可配置
原先 reclaim idle 与去重 TTL/前缀硬编码在 autoconfig 里,按业务处理时延调优只能改源码。

- 新增 RedisStreamMqProperties(前缀 mq.redis-stream):reclaim-min-idle + idempotent.{key-prefix,processing/success/fail-ttl}
- 默认值与历史硬编码完全一致(reclaim 30s / processing 60s / success 300s / fail 300s / mq:idem:),不改变现有行为
- autoconfig 改由 Properties 取值装配 driver 与 RedisMqIdempotentStore
- 补默认值一致性 + mq.redis-stream.* 绑定覆盖单测;wiring 测试改按方法名反射以适配新签名

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 20:41:21 +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%