0


RabbitMQ如何保证消息的顺序性【重点】

1.1 保证顺序性的意义

消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常

举例:
  比如通过

mysql binlog

进行两个数据库的数据同步,由于对数据库的数据操作是具有顺序性的,如果操作顺序搞反,就会造成不可估量的错误。比如数据库对一条数据依次进行了

插入->更新->删除

操作,这个顺序必须是这样,如果在同步过程中,消息的顺序变成了

删除->插入->更新

,那么原本应该被删除的数据,就没有被删除,造成数据的不一致问题。

1.2 出现顺序错乱的场景

我们还是以RabbitMQ为例,后续会陆续更新更多的MQ的解决方案。

1.2.1 错乱场景一

①一个

queue

,有多个

consumer

去消费,这样就会造成顺序的错误,

consumer

MQ

里面读取数据是有序的,但是每个

consumer

的执行时间是不固定的,无法保证先读到消息的

consumer

一定先完成操作,这样就会出现消息并没有按照顺序执行,造成数据顺序错误。

在这里插入图片描述

1.2.2 错乱场景二

一个

queue

对应一个

consumer

,但是

consumer

里面进行了多线程消费,这样也会造成消息消费顺序错误。
在这里插入图片描述

1.3 保证消息的消费顺序

1.3.1 解决方案一

拆分成多个

queue

,每个

queue

一个

consumer

,就是多一些

queue

而已,确实是麻烦点;这样也会造成吞吐量下降,可以在消费者内部采用多线程的方式取消费。
在这里插入图片描述

1.3.2 解决方案二

或者就一个

queue

但是对应一个

consumer

,然后这个

consumer

内部用内存队列做排队,然后分发给底层不同的

worker

来处理

在这里插入图片描述

标签: rabbitmq java 分布式

本文转载自: https://blog.csdn.net/weixin_42039228/article/details/123526391
版权归原作者 sunnyday0426 所有, 如有侵权,请联系我们删除。

“RabbitMQ如何保证消息的顺序性【重点】”的评论:

还没有评论