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日
    浏览(24)
  • C#使用RabbitMQ发送和接收消息工具类

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    2024年02月02日
    浏览(38)
  • RabbitMQ如何保证消息可靠性

    目录 1、RabbitMQ消息丢失的可能性 1.1 生产者消息丢失场景 1.2 MQ导致消息丢失 1.3 消费者丢失 2、如何保证生产者消息的可靠性 2.1 生产者重试机制 2.2 生产者确认机制 2.3 实现生产者确认 2.3.1 配置yml开启生产者确认 2.3.2 定义ReturnCallback 2.3.3 定义ConfirmCallback 3、MQ消息可靠性 3.1

    2024年02月20日
    浏览(41)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包