博客 RabbitMQ如何保证顺序性

RabbitMQ如何保证顺序性

   数栈君   发表于 2023-09-11 10:21  199  0

1. RabbitMQ消息顺序性说明

顺序性: 消息的顺序性是指消费者消费到消息和发送者发布的消息的顺序是一致的
举个例子,不考虑消息重复的情况下,如果生产者发布的消息分别为msg1、msg2、msg3 那么消费者必然也是按照 msg1、msg2、msg3 的顺序来消费的
目前很多资料显示RabbitMQ消息能够保障顺序性,这是不在正确的,或者说这个观点有很大局限性。在不使用任何Rabbitmq 的高级特性,也没有消息丢失、网络故障之类异常的情况下发生,并且只有一个消费者的情况下,也只有一个生产者的情况下可以保证消息的顺序性。如果有多少生产者同时发送消息,无法确定消息到达Broker的前后顺序,也就无法验证消息的顺序性,因为每一次消息的发送都是在各自的线程中进行的

2. RabbitMQ消息顺序错乱演示

生产者发送消息:
1 不使用生产者确定机制,单生产者单消费者可以保证消息的顺序性
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/206b0967f4c60691de7473c6e21a4c15..png
  

2 使用了生产者确认机制,那么就无法保证消息到过Broker的前后顺序,因为消息的发送是异步发送的,每一个线程的执行时间不同
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/6f3abaf08a7df93ffc5a225c8493f17a..png
  

3 生产端使用事务机制,保证消息的顺序性
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/29ba02d2d3164305a2ca6cd852e5066f..png
  

消费端消费消息:

1 单消费者可以保证消息的顺序性

2 多消费者不难保证消息的顺序,因为每一个消息的消费都是在各自的线程中进行,每一个线程的执行时间不同

3.RabbitMQ消息顺序性保障

生产端启动事务机制,单生产者单消费者。如果我们不考虑消息到达MQ的顺序。只是考虑对已经到达MQ的消息顺序消费,那么需要保证消费者是单消费者即可

4.重复消费解决方案

http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/160389f9e7caf85b294c2e26aec5dbf9..png
  
http://dtstack-static.oss-cn-hangzhou.aliyuncs.com/2021bbs/files_user1/article/917f6aea9e317d71173fd633ae7d1ff4..png
  




免责申明:


本文系转载,版权归原作者所有,如若侵权请联系我们进行删除!

《数据治理行业实践白皮书》下载地址:https://fs80.cn/4w2atu

《数栈V6.0产品白皮书》下载地址:
https://fs80.cn/cw0iw1

想了解或咨询更多有关袋鼠云大数据产品、行业解决方案、客户案例的朋友,浏览袋鼠云官网:
https://www.dtstack.com/?src=bbs

同时,欢迎对大数据开源项目有兴趣的同学加入「袋鼠云开源框架钉钉技术群」,交流最新开源技术信息,群号码:30537511,项目地址:
https://github.com/DTStack

0条评论
社区公告
  • 大数据领域最专业的产品&技术交流社区,专注于探讨与分享大数据领域有趣又火热的信息,专业又专注的数据人园地

最新活动更多
微信扫码获取数字化转型资料
钉钉扫码加入技术交流群