消息中间件如何解决消息丢失问题

拜拜、爱过 提交于 2019-12-01 09:45:39

为了解决消息丢失问题,我们引入了一些重发机制,但也带来的另外一个问题:消息重复,我们来看下都有哪些情况会导致消息重复:

 

消息发送超时,处于不确定状态,导致重试发送消息,有可能之前的消息已经发送成功,会出现消息重复的情况。解决的思路是,每个消息生成一个消息id,如果发送的消息Broker已经存在了,则丢弃。这种解决办法需要维护一个已经接收的消息的message id list。

 

消息在Broker中只有一份,但是consumer重启前,未及时更新offset,导致consumer重启之后重复消费消息。

上游业务给每个message 分配一个message ID,下游业务在接收到message之后,执行业务并且保存message ID,而且要讲两部分放到同一个事务中,保证业务执行成功,message ID肯定保存,业务执行失败,message ID肯定不会保存下来,利用db中存储的message id来做幂等。我们可以重新封装producer client和consumer client,将这部分message ID分配和判重的逻辑封装到client lib里面。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!