RocketMQ怎么保证消息不重复消费

RocketMQ怎么保证消息不重复消费

RocketMQ的架构图如下:
在这里插入图片描述
当我们使用消费方消费消息时,我们要保证消息幂等,也就是不管生产者对一次重复的消息提交多少次,我们都要确保消费者只消费一次。
但在实际情况中,常常会遇到以下情况导致消费者可能对同一消息消费多次。

  1. 发送消息重复,生产者发送消息到服务端后因为网络波动或客户端宕机导致服务器端并没有及时响应,生产者可能会认为自己发送消息失败,再次发起提交,这样消费者就会获得两条MessageID相同内容也完全相同的消息。
  2. 投递时消息重复,消息已被消费者消费并返回给客户端,但客户端对服务器端的反馈失败,mq为了保证每条消息都至少被消费一次会再次投递给消费者之前已经处理过的消息,消费者任然会获得两条MessageID相同内容也完全相同的消息。
  3. 负载均衡时消息重复,当消费者消费成功消息后,因为mq触发了负载均衡导致消费者收到重复消息。

处理方法:可以给消息设置一个唯一ID,当消费者消费消息时就将这个ID存储在数据库中,每次消费者消费消息次就用这个ID去数据库里查找是否有相同ID来确保是否要消费消息,这样就实现了消息幂等。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值