“怎么还没收到短信?”RocketMQ 堆了 300 万条消息,我从 Diff Total 一路追到一个死循环重试
用户投诉验证码半小时没到,RocketMQ 短信 Topic 堆积 300 万。用 mqadmin consumerProgress / consumerConnection / topicStatus 判断是消费慢还是消费者掉线,定位到线程卡在下游接口与失败无限重试,并给出扩容、批量消费、死信与跳过历史消息的处置。
从一个关键词,发现新的思路。
用户投诉验证码半小时没到,RocketMQ 短信 Topic 堆积 300 万。用 mqadmin consumerProgress / consumerConnection / topicStatus 判断是消费慢还是消费者掉线,定位到线程卡在下游接口与失败无限重试,并给出扩容、批量消费、死信与跳过历史消息的处置。
同一天两起投诉:验证码收到两条、一笔扣款没有对应的消息。以 RocketMQ 为主,讲清 at-least-once 下重复消费的根源(超时重投、重平衡、重试),落地唯一键/去重表/状态机/SETNX 幂等;再沿生产端、Broker、消费端三环节查丢消息并给出配置。
不局限某一种 MQ,先把消息队列的通用命题讲清楚:削峰、解耦、异步、最终一致四大价值,RocketMQ/Kafka/RabbitMQ 的选型对比,以及消息丢失、重复消费、顺序性、堆积、幂等、事务消息这六个绕不开的问题与通用解法。
RocketMQ 从部署到生产的完整笔记:NameServer/Broker/Producer/Consumer 架构与 CommitLog 存储设计,普通/顺序/事务/延迟消息的写法与适用边界,消息堆积与重复消费的排查套路,附常用 mqadmin 命令和一份生产参数配置。