springboot+rabbitmq两小时入门(九):如何保证消息按顺序执行

文章摘自关于MQ面试的几件小事 | 如何保证消息按顺序执行 - 云+社区 - 腾讯云,增加了一些自己的理解。

1.为什么要保证顺序

消息队列中的若干消息如果是对同一个数据进行操作,这些操作具有前后的关系,必须要按前后的顺序执行,否则就会造成数据异常。举例: 比如通过mysql binlog进行两个数据库的数据同步,由于对数据库的数据操作是具有顺序性的,如果操作顺序搞反,就会造成不可估量的错误。比如数据库对一条数据依次进行了 插入->更新->删除操作,这个顺序必须是这样,如果在同步过程中,消息的顺序变成了 删除->插入->更新,那么原本应该被删除的数据,就没有被删除,造成数据的不一致问题。

2.出现顺序错乱的场景

 ①一个queue,有多个consumer去消费。因为每个consumer的执行时间是不固定的,先读到消息的consumer不一定先完成操作。

②一个queue对应一个consumer,但是consumer里面进行了多线程消费,这样也会造成消息消费顺序错误。

3.保证消息的消费顺序

首先得明白具有先后顺序的一组消息一定有一个字段的值是一样的,比如订单号。这样我们根据该字段值的Hash值判断发送那个队列,这样具有先后顺序的一组消息就一定在同一个队列,因为该字段值是一样的,所以hash值也是一样的。

①拆分多个queue,每个queue一个consumer。

②一个queue一个consumer,但是consumer将消息存到多个内存队列(存的逻辑和上面一样),每个内存队列都对应一个线程。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值