【MQ】消息顺序消费

什么是顺序消费?乱序消费消息的原因是什么?

        (1)顺序消费是指同一个业务数据的多条消息(增删改)由生产者生产后,我们希望消费者在消费消息时能按照消息的生产顺序来进行消费,而不是无序消费。

        (2)乱序消费原因其实MQ是能保证消息按先后顺序被消费者获取,原因在于如果有多个消费者实例监听一个队列,它们拿到的消息不同,并且消费者实例的机器性能也不一样,就有可能后来的消息先被消费(先消费成功),先来的消息后被消费(后消费成功),产生不可预知的错误;如果消费者实例是用线程池处理消息,那么也有可能导致乱序消费。

为什么要保证消息顺序消费?

        场景项目有时候需要同步某一个系统的数据到数据部门的数据库中,一般是通过Canal等监听组件去监听binlog,再把监听到的数据发送到MQ中,最后数据部门抓取消息消费,将系统的数据落盘。binlog日志中记录着数据的增删改语句,如果消费者是乱序消费(不按照binlog日志的生产顺序),就有可能导致数据发生异常。

如何保证顺序消费消息?

        (1)既然多个消费者实例会导致乱序消费,那我们就让一个消费者实例Consumer监听一个队列queue,MQ会保证消费者实例抓取的消息是有序的。

        (2)如果关于同一个业务数据的多条消息被分发到了不同的queue中,也会导致乱序消费问题。在生产者生产消息时,用业务数据的唯一标识计算一个哈希值并对queue的个数取模,让其路由到一个特定的queue中,之后关于这个业务数据的多条消息都会路由到同一个queue中,消费者就能有序的处理关于这个业务数据的多条消息。

        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值