如何保证消息的顺序性?

2022-05-13 09:37:09 浏览数 (1)

RabbitMQ可能出现的消息顺序不一致问题 消息中间件都是消息队列,也就是说我们发布消息是顺序的,到消息中间件中也是有顺序的,并且消费者从消息队列中取消息也是顺序的,那么消息可能从哪里乱序呢?? 答案是:可能是多个消费者消费时候有不同的消费速度,造成了乱序

举个栗子 这里我们需要同步一个mysql基础库里的数据到操作库 我们在基础mysql里增删改一条数据,对应出来了增删改3条binlog(数据库更新的SQL语句信息),接着这三条binlog发送到MQ里面,到消费出来依次执行.需要保证人家是按照顺序来的,不然本来是有顺序性的:增加、修改、删除;系统换了顺序执行成了删除、修改、增加,就错了。

RabbitMQ可能出现的顺序不一致问题--主要因为只由一个queue后,好几个消费者进行消费,他们互相之间不知道彼此顺序

那如何保证消息的顺序性呢?

rabbitmq:

  • 拆分多个queue,每个queue对应一个consumer,然后把需要保证顺序的数据刷到一个consumer中,不需要保证顺序的随便发给concumer接收
  • 或者还是一个queue,只对应一个consumer,然后这个consumer内部用内存队列做排队,然后分发给底层不同的worker来处理
  • 在redis中设置门,给消息设置钥匙,门中表示接收的钥匙. 比如门中设置接收的钥匙是1,接收数据尾号为_1的数据,消费完毕,更新门为2,那么下次就接收数据尾号为_2的数据了

0 人点赞