MQ Topic 实践怎么做:申请、配置、消费、重试和死信队列

2次阅读
没有评论

很多团队使用 MQ 时,代码只是一部分,真正容易踩坑的是 topic 申请、配置生效、消费者绑定、重试策略和死信队列。

这篇整理一份 MQ Topic 实践清单。

Topic 不是随手创建的字符串

在正式环境里,topic 往往需要申请、审批和绑定生产者、消费者。不要把 topic 当成代码里随手写的常量。

上线前要确认:

  • topic 是否已经创建。
  • 生产者是否有发送权限。
  • 消费者是否有订阅权限。
  • 预发和生产是否分别配置。
  • 配置中心里的 topic 名是否和代码一致。

很多“消费者没有消息”的问题,最后都不是代码问题,而是配置或权限问题。

配置中心要和代码一起看

MQ 配置经常不在本地配置文件里,而在配置中心或部署平台里。排查时要同时看:

  • 代码里的监听器。
  • 配置中心里的 topic。
  • 部署环境实际读取的配置。
  • 生产者发送时使用的 topic。

如果本地配置很旧,不能只根据本地 YAML 判断线上行为。

消费者异常要明确抛给 MQ

消费逻辑里常见两种处理方式:

  • 异常直接抛出,让 MQ 触发重试。
  • 业务自己捕获异常,写失败表或失败日志。

这两种都可以,但不要混着来。如果异常被吞掉,MQ 可能认为消费成功,消息就不会再重试。

更稳的做法是明确约定:

  • 哪些异常可以重试。
  • 哪些异常直接进入失败记录。
  • 重试次数在哪里配置。
  • 超过重试次数后是否进死信队列。

bizId 和幂等要提前想

消息消费通常要考虑重复投递。上游如果能提供稳定的业务 ID,可以用它做幂等键。

幂等设计可以放在:

  • 消费记录表。
  • Redis 去重 key。
  • 业务唯一索引。
  • 下游写入前的状态检查。

没有幂等的 MQ 消费,很容易在重试、超时或消费者重启时产生重复数据。

死信队列不是摆设

死信队列适合承接多次重试仍失败的消息。上线前要确认:

  • 当前 MQ 版本是否支持死信队列。
  • 死信队列在哪里查看。
  • 是否需要手动重放。
  • 重放时是否会产生重复业务影响。

如果平台只提供页面操作,也要把操作入口和权限提前确认好。

Topic 拆分要可维护

把一个大 topic 拆成多个业务 topic,可以降低单个消费者复杂度。但 topic 太多会带来配置成本。

拆分时可以按这些维度判断:

  • 业务类型是否不同。
  • 消费速率是否不同。
  • 失败影响是否需要隔离。
  • 是否需要独立扩容。
  • 是否有独立监控需求。

MQ 的好设计不是 topic 越细越好,而是让消息流和业务边界对齐。

实践清单

上线前可以按这个顺序核对:

  1. topic 已创建。
  2. 生产者和消费者权限已绑定。
  3. 配置中心已发布。
  4. 消费者监听器已生效。
  5. 异常处理策略明确。
  6. 重试次数可确认。
  7. 死信队列可查看。
  8. 幂等键可追踪。
  9. 日志能定位消息 ID 和业务 ID。

MQ 的稳定性不只在代码里,也在配置、权限和运维入口里。把这些前置核对清楚,线上排查会轻很多。

正文完
 0
bdspAdmin
版权声明:本站原创文章,由 bdspAdmin 于2026-07-05发表,共计1072字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)