消息队列常见面试题:如何检测消息丢失,谈谈消息丢失的兜底方案

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

今天咱们来聊聊消息队列中如何检测消息丢失以及相应的兜底方案。

上一期我们讲到了如何防止消息丢失,提到在生产、消费和存储这 3 个阶段都有保障措施,分别是生产阶段和消费阶段的 ack 确认,还有存储阶段的持久化策略。这些做起来相对容易,但即便如此,在分布式环境中,还是难免会出现消息丢失的情况。

作为消息的生产端,无法完全保证 MQ 不丢消息,也不能保证消费者能完全处理。所以本着“design for the failure”的设计原则,我们需要一种机制来检查消息是否丢失,并对丢失的消息做额外补偿,这就是常说的兜底方案。

可以利用拦截器机制,在生产端发送消息之前,通过拦截器将消息版本号设置好,版本号可以利用连续递增的 ID 生成,也可以通过分布式的全局 ID。消费端收到消息后,再通过拦截器把版本号记录下来,然后检测版本号的连续性来判断是否丢消息。如果丢了,就进行消息补偿。拦截器实现起来不难,常见的如 ADP 面向切面编程,它的好处是不用侵入到具体的业务代码中,契合度较低。

另外一个简单的方案,还是以消费送积分为例,定期去检查是否成功收到积分,如果没有变化,就采取相应措施。

感兴趣的小伙伴可以深入了解一下哦!


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

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

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