RabbitMQ防止消息重复消费、保证异步消息的幂等性

这篇具有很好参考价值的文章主要介绍了RabbitMQ防止消息重复消费、保证异步消息的幂等性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、rabbitmq出现消息重复的场景
1、消费成功,没有进行ack,这时 Broker 会重新发送
2、不确认(unack)或 reject 之后,重新排队,Broker 会重新发送
3、消费成功,ack时宕机,没有ack成功,消息由unack变为ready,Broker又重新发送
4、总的来说就是 Broker 发送消息后,消费端收到消息了,但是ack时候出现网络或其他问题,Broker 没有收到确认,就会重发

说明:
由于重复消息是由于网络原因或其他不确定性造成的,因此不可避免重复消息。但是我们要确保消息的幂等性

二、解决方案(保证消息的幂等性)
1、把消息唯一 Id 写入redis的push字典,或者写入DB,用来校验此条消息是否被消费过
2、在消息对应的数据表,每当消息到达消费端时,通过对消息的状态与表数据状态进行判断,防止消息重复消费
3、利用消息体中的关键参数,例如:id、业务编号、订单编号等,根据这些关键参数进行查询数据表,有数据就不再增加(或者校验该数据是某种特定状态不再增加)

三、注意
1、消息队列是异步的,所以在消费端处理业务时,如果需要校验消息发送端处理或计算的结果,需要注意消息发送端的事务是否已经提交。这种场景一般发送延迟消息,等待发送端事务提交文章来源地址https://www.toymoban.com/news/detail-635323.html

到了这里,关于RabbitMQ防止消息重复消费、保证异步消息的幂等性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何保证消息不被重复消费?

           在Java中,可以使用消息队列来实现消息的异步处理,其中常用的消息队列有 RabbitMQ、ActiveMQ、Kafka 等。 为了避免消息被重复消费,可以使用以下几种方法: 常见的消息队列如 Kafka、RocketMQ等提供了幂等性机制,能够确保同一条消息被消费多次时只会产生一次影响。在

    2024年02月16日
    浏览(32)
  • redis如何保证接口的幂等性

    背景 如何防止接口中同样的数据提交,以及如何保证消息不被重复消费,这些都是 shigen 在学习的过程中遇到的问题。今天,趁着在学习 redis 的间隙,我写了一篇文章进行简单的实现。 注意:仅使用于单机的场景,对于分布式、高并发场景,还是建议使用分布式锁。 首先我

    2024年02月09日
    浏览(43)
  • mq常见问题:消息丢失、消息重复消费、消息保证顺序

    mq常见问题:消息丢失、消息重复消费、消息保证顺序 消息丢失问题 拿rabbitmq举例来说,出现消息丢失的场景如下图 从图中可以看到一共有以下三种可能出现消息丢失的情况: 1 生产者丢消息 生产者在将数据发送到MQ的时候,可能由于网络等原因造成消息投递失败 2MQ自身丢

    2024年02月09日
    浏览(60)
  • kafka如何保证消息不被重复消费

    (1)kafka有个offset的概念,当每个消息被写进去后,都有一个offset,代表他的序号,然后consumer消费该数据之后,隔一段时间,会把自己消费过的消息的offset提交一下,代表我已经消费过了。下次我要是重启,就会继续从上次消费到的offset来继续消费。但是当我们直接kill进程

    2024年02月11日
    浏览(51)
  • 如何保证用户重试操作的幂等性

    服务不稳定是一类常态,面对此类场景恰当的应对策略应该是什么?退一步说,即使我们能够确保第一方服务的稳定性,我们又应该如何面对网络延迟以及掌控以外的不确定性?这都是本篇文章会谈到的内容 本文是团队内部分享的文字版,敏感信息已经抹去或者重写。我们通

    2024年02月06日
    浏览(45)
  • 如何保证分布式情况下的幂等性

    关于这个分布式服务的幂等性,这是在使用分布式服务的时候会经常遇到的问题,比如,重复提交的问题。而幂等性,就是为了解决问题存在的一个概念了。 什么是幂等 幂等(idempotent、idempotence)是⼀个数学与计算机学概念,常⻅于抽象代数中。 在编程中⼀个幂等操作的特

    2024年02月07日
    浏览(51)
  • RocketMQ和Kafka的区别,以及如何保证消息不丢失和重复消费

    性能(单台) 语言 多语言支持客户端 优缺点 RocketMQ 十万级 java java 模型简单、接口易用,在阿里有大规模应用 文档少,支持的语言少 Kafka 百万级 服务端scala,客户端java 主流语言均支持 天生分布式、性能最好,常用于大数据领域 运维难度大,对zookeeper强依赖,多副本机制

    2024年01月16日
    浏览(47)
  • RabbitMQ-业务的幂等性

    生产者和消费者都需要添加配置类: 消费者拿到id之后,保存到数据库,后续消费时,需要查数据库进行比较,因此这种方案的缺点就是有业务的入侵,对性有一定的影响。 (1)查询和删除操作本身就是幂等性操作。 (2)可以使用分布式锁,对单据id锁定,防止多次提交,

    2024年01月21日
    浏览(43)
  • Kafka如何保证消息的消费顺序【全局有序、局部有序】、Kafka如何保证消息不被重复消费、Kafka为什么这么快?【重点】、Kafka常见问题汇总【史上最全】

    目录 Kafka消息生产 一个Topic对应一个Partition 一个Topic对应多个Partition Kafka消息的顺序性保证(Producer、Consumer) 全局有序 局部有序  max.in.flight.requests.per.connection参数详解 Kafka的多副本机制 Kafka的follower从leader同步数据的流程 Kafka的follower为什么不能用于消息消费 Kafka的多分区

    2024年04月11日
    浏览(54)
  • 什么是mq?可靠性、重复消息、重复消费、丢失、发送大文件、延迟、发送机制、重试、死信、幂等、有序、大小、过期、优先级、进了死信队列还能出来吗?

    “MQ” 指的是消息队列(Message Queue),是一种用于异步通信的技术。消息队列是一种中间件,用于在分布式系统中传递消息,使不同组件之间能够进行松散耦合的通信。它的核心思想是生产者将消息发送到队列,而消费者从队列中接收并处理消息。 消息队列的主要优点包括

    2024年02月06日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包