RabbitMQ如何保证消息的发送和接收

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

一、RabbitMQ如何保证消息的发送和接收

1.ConfirmCallback方法

ConfirmCallback是一个回调接口,消息发送到broker后触发回调,确认消息是否到达broker服务器,也就是只确认消息是否正确到达Exchange交换机中。

2.ReturnCallback方法

通过实现ReturnCallback接口,启动消息失败返回,此接口是在交换机路由不到队列时触发回调,该方法可以不使用,因为交换机和队列是在代码里绑定的,如果消息投递到broker后几乎几乎不存在绑定队列失败,除非你代码写错了。

3.消息确认接收

RabbitMQ消息确认机制ack是默认自动确认的,自动确认会在消息发送给消费者后立即确认,但存在消息丢失的可能,如果消费逻辑出现异常,假如回滚了,也只是保证了数据一致性,但是消息还是丢了,也就是消费端没有成功处理这个消息,相当于消息丢失。

消费者收到消息后,手动调用Basic.ack或Basic.Nack或Basic.Reject后,RabbitMQ收到这些消息后,才认为本次投递完成。

Basic.ack 用于确认当前消息,Basic.Nack 用于否定当前消息 ,Basic.Reject 用于拒绝当前消息

Nack ,Reject 后有能力要求是否requeue消息或进入死信队列。

1.1 生产时消息重复

由于生产者发送消息给MQ,在MQ确认的时候出现了网络波动,生产者没有收到确认,实际上MQ已经接收到了消息。这时候生产者就会重新发送一遍这条消息。

生产者中如果消息未被确认,或确认失败,我们可以使用定时任务+(redis/db)来进行消息重试。

1.2消费时消息重复

消费者消费成功后,再给MQ确认的时候出现了网络波动,MQ没有接收到确认,为了保证消息被消费,MQ就会继续给消费者投递之前的消息。这时候消费者就接收到了两条一样的消息。

让每个消息携带一个全局的唯一ID,即可保证消息的幂等性,具体消费过程为:

  1. 消费者获取到消息后先根据id去查询redis/db是否存在该消息

  1. 如果不存在,则正常消费,消费完毕后写入redis/db

  1. 如果存在,则证明消息被消费过,直接丢弃。文章来源地址https://www.toymoban.com/news/detail-616898.html

到了这里,关于RabbitMQ如何保证消息的发送和接收的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • rabbitMQ:绑定Exchange发送和接收消息(direct)

    AMQP 协议中的核心思想就是生产者和消费者的解耦,生产者从不直接将消息发送给队列。生产者通常不知道是否一个消息会被发送到队列中,只是将消息 发送到一个交换机。先由 Exchange 来接收,然后 Exchange 按照特定的策略转发到 Queue 进行存储。Exchange 就类似于一个交换机,

    2024年02月15日
    浏览(36)
  • C#使用RabbitMQ发送和接收消息工具类

    下面是一个简单的 C# RabbitMQ 发送和接收消息的封装工具类的示例代码: 通过NuGet安装 RabbitMQ.Client

    2024年02月11日
    浏览(53)
  • 记一次rabbitmq消息发送成功,消费丢失问题

    测试数据归档,偶现数据未归档 idea线上调试,log日志,数据库消息发送记录,代码分块重复执行看哪块出的问题,结果均无问题,最后使用rabbitmq trace日志,发现问题所在 1. 什么是Trace Trace 是Rabbitmq用于记录每一次发送的消息,方便使用Rabbitmq的开发者调试、排错。可通过插

    2024年02月16日
    浏览(51)
  • 「RabbitMQ」实现消息确认机制以确保消息的可靠发送、接收和拒收

    目录 介绍 方案 配置手动确认 使用 「Bean 」 配置RabbitMQ的属性 确定消费、拒绝消费、拒绝消费进入死信队列 模拟生产者发送消息①         RabbitMQ 的消息确认机制应用场景非常广泛,尤其是在需要确保消息可靠性和避免消息丢失的场合下更为重要,例如:金融系统、电

    2024年02月08日
    浏览(39)
  • 207、SpringBoot 整合 RabbitMQ 实现消息的发送 与 接收(监听器)

    1、ContentUtil 先定义常量 2、RabbitMQConfig 创建队列的两种方式之一: 配置式: 在容器中配置 org.springframework.amqp.core.Queue 类型的Bean,RabbitMQ将会自动为该Bean创建对应的队列。 就是在配置类中创建一个生成消息队列的@Bean。 问题: 用 @Configuration 注解声明为配置类,但是项目启动

    2024年02月06日
    浏览(57)
  • 【RabbitMQ】RabbitMQ如何确认消息被消费、以及保证消息的幂等

    目录 一、如何保证消息被消费 二、如何保证消息幂等性 RabbitMQ提供了消息补偿机制来保证消息被消费,当一条消费被发送后,到达队列后发给消费者。消费者消费成功后会给MQ服务器的队列发送一个确认消息,此时会有一个回调检测服务监听该接收确认消息的队列,然将消费

    2024年02月16日
    浏览(41)
  • RabbitMQ如何保证消息不丢失?

    1、什么 情况会导致消息丢失 ? ​​​​​​          a.发送 时丢失:                    生产者发送的消息未送达exchange                     消息到达exchange 后未到达 queue         b.MQ宕机, queue 将消息丢失         c.consumer接收到消息后未消费就宕机

    2024年02月02日
    浏览(53)
  • 如何保证 RabbitMQ 消息不丢失?

      第一种:生产者弄丢了数据。生产者将数据发送到 RabbitMQ 的时候,可能数据就在半路给搞丢了,因为网络问题啥的,都有可能。 第二种:RabbitMQ 弄丢了数据。MQ还没有持久化自己挂了。 第三种:消费端弄丢了数据。刚消费到,还没处理,结果进程挂了,比如重启了。   方

    2024年02月08日
    浏览(41)
  • RabbitMQ如何保证消息不丢失

    观察整个 RabbitMQ 消息发送过程: 从上述流程我们可以得知:消息从生产者到达消费者,经过两次网络传输,并且在 RabbitMQ 服务器中进行路由。 因此我们能知道整个流程中可能会出现三种消息丢失场景: 生产者发送消息到 RabbitMQ 服务器的过程中出现消息丢失。 可能是网络波

    2024年02月21日
    浏览(42)
  • RabbitMQ如何保证消息不丢失呢?

    RabbitMQ 是一个流行的消息队列系统,用于在分布式应用程序之间传递消息。要确保消息不会丢失,可以采取以下一些措施: 持久化消息: RabbitMQ 允许你将消息标记为持久化的。这意味着消息将被写入磁盘,即使 RabbitMQ 服务器崩溃,也能够在恢复后重新发送消息。要使消息持

    2024年02月07日
    浏览(45)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包