消息队列常见面试题:消息队列如何保证顺序消费

面试题 潘老师 10个月前 (06-15) 49 ℃ (0) 扫码查看

今天咱们来聊聊分布式系统中消息队列的顺序消费问题。这一直是个让人头疼的难题,也是面试官重点考察的对象。

对于分布式系统中的消息队列,每天都会产生和消费各种各样的消息,不同场景要求各异。其中消息的顺序消费是常见场景,比如消费送积分的例子。订单付款成功后,要给积分中心发消息奖励积分,给通知中心发消息发短信告知用户成功消费一百元,还要给物流中心发消息安排发货。在这个场景中,物流中心不受顺序影响,消费成功就能通知发货。但积分中心和通知中心就有先后顺序,得先处理好积分奖励,再发送短信。

单体架构时,产生的消息有序,消费者也只有一个,按序取消息就行。可在分布式架构里,消息要分发给多个消费者同时处理,就没法保证先处理积分奖励再发短信,消费顺序性难以保证。

那怎么解决呢?关键在于消费者消费前,把有相关性的数据顺序写入同一个队列。同一个订单的积分处理和短信发送必须进同一个队列。为了分压,可以把队列分成好几十个,根据订单号分好,保证相关数据进入同一队列。在消费端,一个队列对应一个消费端。比如队列 1 到 5 对应消费端 A 的五个消费方法,队列 6 到 10 对应消费端 B 的五个消费方法。

可能有人会问,消费端单线程处理太慢,能不能用多线程?答案是能,但要保证同一个订单的积分处理和短信通知在同一个线程中处理,否则顺序还是会乱。可以采用多个内存队列,比如同一个订单的消息进入同一个内存队列,处理完释放该线程,这样在多线程下也能保证顺序处理。

总结一下,消息队列的顺序消费问题,只要保证相关性数据按序写入同一队列,由同一个消费端消费就行。

好了,今天的分享就到这里,希望对您有所帮助。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/ms/13045.html
喜欢 (1)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】