3 重试跟并发消息不一样的是,顺序消息消费失败后并不会把消息发送到 Broker,而是直接在 Consumer 端进行重试,如果重试次数超过了最大重试次数(16 次),则发送到 Broker,Broker 则将消息推入死信队列 。如下图:

文章插图
4 总结RocketMQ 顺序消息的原理是在 Producer 端把一批需要保证顺序的消息发送到同一个 MessageQueue,Consumer 端则通过加锁的机制来保证消息消费的顺序性,Broker 端通过对 MessageQueue 进行加锁,保证同一个 MessageQueue 只能被同一个 Consumer 进行消费 。
根据实现原理可以看到,RocketMQ 的顺序消息可能存在两个坑:
- 有顺序性的消息需要发送到同一个 MessageQueue,可能导致单个 MessageQueue 消息量很大,而 Consumer 端消费的时候只能单线程消费,很可能导致当前 MessageQueue 消息积压;
- 如果顺序消息 MessageQueue 所在的 broker 挂了,这时 Producer 只能把消息发送到其他 Broker 的 MessageQueue 上,而如果新的 MessageQueue 被其他 Consumer 消费,这样两个 Consumer 消费的消息就不能保证顺序性了 。如下图:

文章插图
【5张图带你理解 RocketMQ 顺序消息实现机制】Broker1 发生故障,把订单出库的消息发送到了 Broker2,由 Consumer2 来进行消费,消息顺序很可能会错乱 。
推荐阅读
- 新手怎么加入自媒体,学会这4个运营技巧,你也可以出爆文
- 如何重启MySQL服务
- 来自远程技术提供者的建议,如何阻止他人远程访问你的移动设备?
- 苹果|iPhone开售15周年:34款机型 你用过哪些?
- 大排怎么油炸,油炸大排怎么做法-
- 为什么想应聘文员,面试官问你为什么不做销售想做文员-
- 大爷|59岁离异大妈带简历相亲,要彩礼,还得工资上交:我优秀,你不亏
- 我的解放日志|看了《我的解放日志》,你是致郁了还是治愈了?
- 国产|国产桌面操作系统开发者平台发布:你知道哪些国产系统?
- 大学|高考填报志愿时,省外大学值得报考么?这些你值得了解
