Files
a-share-analysis/docs/adr/ADR-0003-rocketmq-message-bus.md
T

1.6 KiB

ADR-0003:采用 RocketMQ 5.x 作为唯一消息队列

  • 状态:accepted
  • 日期:2026-08-13
  • 关联功能:GOV-008

背景

项目此前在架构和环境模板中约定 RabbitMQ,但尚未实现消息客户端、Topic 或业务消费流程。产品需要分钟级盘中分析、定时采集、指标计算、AI 分析和失败重试,决定在实现前统一切换到 RocketMQ。

决策

  • 项目唯一消息队列为 RocketMQ 5.x,不维护 RabbitMQ 双栈。
  • Scheduler 和 Worker 只依赖项目级 MessageBusAdapter 与版本化事件契约。
  • Node.js 客户端优先通过 RocketMQ 5.x Proxy 接入;若改用直接 NameServer/Broker 客户端,必须通过兼容性和可靠性验证。
  • Topic、Tag、Producer Group、Consumer Group、顺序键、重试与死信语义必须在功能设计中明确。
  • 本地和生产基础设施独立于应用发布;NameServer、Broker、Proxy 不随应用版本自动创建或删除。

原因

RocketMQ 对定时/延迟任务、重试、死信、顺序消息和后续任务规模扩展更符合预期。Adapter 边界用于控制 Node 客户端成熟度和接入协议变化带来的风险。

代价

  • 本地和生产运维复杂度高于单节点 RabbitMQ,需要区分 NameServer、Broker 和 Proxy。
  • Node.js 生态需要在 Server 脚手架阶段单独验证,不能仅凭 NameServer 端口可达决定客户端可用。
  • 所有消费者必须按至少一次投递设计幂等和受控重放。

验证

GOV-008 只验证配置、文档契约和本机 NameServer 状态。真实 Topic 生产/消费必须在 Broker/Proxy 可用且 Server 客户端选定后补充契约测试。