Rabbitmq消息重复消费

1、消息何时会重复消费

自动提交模式时

消费者进行处理后,会给队列发送一个ack(参考上一篇的消息丢失),但是这个ack在中途丢失了,导致队列以为消费者没有成功消费。所以就不会删除这个消息,会进行重新消费。

手动提交模式

用户手动提交后,ack丢失,和上文一致。

接收到消息并处理接触了,此时消费者挂了,来不及发手动提交,发ack。

2.解决方案:

造成上面的原因只要还是网络问题、以及消费者宕机。这种是无法避免的。最多就是绕过这个问题。即:如果消费端收到两条一样的消息,应该怎样处理?

2.1 消费端处理消息的业务逻辑保持幂等性。

  • 比如你拿个数据要写库,先根据主键查一下,如果这数据有了,就别插入了,update 一下。
  • 比如你是写 Redis,那没问题了,反正每次都是 set,天然幂等性。

2.2 消费者用消息日志保证幂等

利用一张日志表来记录已经处理成功的消息的 ID,如果新到的消息 ID 已经在日志表中,那么就不再处理这条消息。

注意:此时需要保证每个消息都有唯一的id。 ​

相关推荐
跟着珅聪学java3 小时前
在电商系统中,如何确保库存扣减的原子性
分布式
JH30735 小时前
Redisson 看门狗机制:让分布式锁“活”下去的智能保镖
分布式
一点 内容6 小时前
深入理解分布式共识算法 Raft:从原理到实践
分布式·区块链·共识算法
8Qi86 小时前
分布式锁-redission
java·redis·分布式·redisson
7 小时前
鸿蒙——分布式数据库
数据库·分布式
jiayong237 小时前
微服务架构与 Spring 生态完全指南
kafka·rabbitmq·rocketmq
Hui Baby7 小时前
分布式多阶段入参参数获取
分布式
阿拉斯攀登10 小时前
Spring Cloud Alibaba 生态中 RocketMQ 最佳实践
分布式·微服务·rocketmq·springcloud·cloudalibaba
无锡布里渊10 小时前
感温光纤 DTS 系统 vs 感温电缆 对比分析报告
分布式·实时监测·分布式光纤测温·线型感温火灾监测·感温电缆
g323086310 小时前
分布式框架seata AT模式源码分析
java·数据库·分布式