RabbitMQ系列教程六:如何处理消费过程中的重复消息?

在这里插入图片描述

介绍

看到本节的题目你有可能会想怎么会遇到消费重复消息的场景呢?
生产者只发送一次不就行了,或者消息队列自动把重复的消息丢掉不就行了

当生成者成功发送消息到broker,但是没有得到响应时,会重新发送消息到broker,此时broker中就会有重复的消息。如果不重试的话就有可能造成消息丢失。

MQTT协议中阐明了消息传递的三种服务质量,这三种服务质量从低到高是

  1. At most once:至多一次,消息在传递时,最多被送达一次
  2. At least once:至少一次,消息在传递时,至少被送达一次
  3. Exactly once:恰好一次,消息在传递时,恰好被送达一次

消息队列是可以把重复的消息丢掉,但实现成本很高,收益却很低。

我来举个例子,当消费者消费消息成功,但是ack失败,此时broker还是会发一条重复的消息到消费者,消费者还得保证方法的幂等。

所以消息队列允许少量的重复消息,在业务层面对方法做幂等是最佳的实现方式,我们常用的消息队列如RabbitMQ,RocketMQ,Kafka的服务质量都是At least once

如何保证方法的幂等呢?

使用唯一索引

对业务唯一的字段加上唯一索引&

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java识堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值