首页 > 其他分享 >RabbitMQ高级篇之发送者可靠性 发送者确认的代码实现

RabbitMQ高级篇之发送者可靠性 发送者确认的代码实现

时间:2025-01-05 19:01:21浏览次数:3  
标签:发送 可靠性 确认 returnCallback publish 发送者 RabbitMQ confirmCallback 消息

文章目录

一、配置文件中启用确认机制

  1. application.ymlapplication.properties 文件中开启 publish confirmpublish return
    • publish confirm 有三个模式:
      • null:关闭(默认)。
      • simple:同步阻塞模式。
      • correlated:异步模式。
    • publish return 默认为 false,需要显式设置为 true



二、编写 returnCallbackconfirmCallback

  1. returnCallback 的实现

    • 创建一个配置类 MqConfig,通过构造函数注入 RabbitTemplate
    • 使用 @PostConstruct 注解初始化函数,在容器加载完成后给 RabbitTemplate 添加 ReturnCallback
    • ReturnCallback 是一个接口,处理返回的消息。可以使用 Lambda 表达式简化代码:

  2. confirmCallback的实现

    • 在发送消息时指定 confirmCallback,需要为每次发送的消息创建 CorrelationData,并指定消息 ID 和回调。
    • 通过 ListenableFutureCallback异步处理确认结果:



三、消息确认测试

  1. 测试发送成功的情况
    • 确保发送的消息成功投递并返回 ack,测试时确保日志级别设置为 DEBUG,以便查看确认信息。
  2. 测试发送失败的情况
    • 测试路由失败的场景,如 routingKey错误,RabbitMQ 会通过 returnCallback返回失败信息,并记录 replyCodereplyText
  3. 测试 nack 返回
    • 在发送消息时,若交换机配置错误或消息未成功持久化,RabbitMQ 会返回 nack,需要记录失败原因并考虑重试机制。



四、性能注意事项

  • 发送者确认机制由于需要与 RabbitMQ 进行双向通信,会显著影响消息发送的性能。大多数情况下,消息发送出现异常的概率较低,因此通常不建议启用此机制,除非确有需求。
  • 若启用确认机制,需要设置合理的重试次数,避免无限重试造成性能下降。



总结

  • 发送者确认机制由 publish confirmpublish return 两部分组成,能够提高消息发送的可靠性。
  • returnCallbackconfirmCallback用来处理消息发送失败的情况,提供消息投递失败的原因。
  • 该机制虽能提高可靠性,但会影响系统性能,因此要谨慎使用,并合理设置重试机制。

标签:发送,可靠性,确认,returnCallback,publish,发送者,RabbitMQ,confirmCallback,消息
From: https://blog.csdn.net/2301_80093566/article/details/144827600

相关文章

  • RabbitMQ学习三 管理后台
    参考地址:https://www.cnblogs.com/cplinux/p/17937314https://blog.csdn.net/biexiansheng/article/details/103122511?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-103122511-blog-128546674.235^v43^pc_blog_bottom_rel......
  • Python--pika (rabbitmq)
    connectionconnection=BlockingConnection(ConnectionParameters(host='xxx',port=xxx,credentials=PlainCredentials(username='xxx',password='xxx')))channelchannel=connection.channel()生......
  • 8、RabbitMQ队列之发布确认【RabbitMQ官方教程】
    Publisher确认是一个RabbitMQ扩展,用于实现可靠的发布。当发布者确认在通道上启用时,客户端发布的消息将由代理异步确认,这意味着它们已在服务器端得到处理。概述在本教程中,我们将使用发布者确认来确保发布的消息已安全到达代理。我们将介绍使用出版商确认的几种策略,并解释它们的优......
  • rabbitmq-2
    springboot/springcloud整合rabbitmq实战简单例子生产者创建项目,引入jar<!--springboot整合rabbitmq包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId......
  • 7、RabbitMQ队列之远程调用(RPC)【RabbitMQ官方教程】
    在第二个教程中,我们学习了如何使用工作队列在多个工作人员之间分配耗时的任务。但是,如果我们需要在远程计算机上运行一个函数并等待结果呢?好吧,那是另一回事。这种模式通常被称为远程过程调用或RPC。在本教程中,我们将使用RabbitMQ构建一个RPC系统:一个客户端和一个可扩展的RPC服务......
  • 6、RabbitMQ队列之主题【RabbitMQ官方教程】
    在前面的教程中,我们改进了日志系统。我们没有使用只能进行虚拟广播的扇出交换机,而是使用了直接交换机,从而有可能选择性地接收日志。虽然使用直接交换改进了我们的系统,但它仍然有局限性——它不能基于多个标准进行路由。在我们的日志系统中,我们可能不仅要根据严重性订阅日志,还要......
  • 5、RabbitMQ队列之路由【RabbitMQ官方教程】
    在前面的教程中,我们构建了一个简单的日志系统。我们能够向许多接收器广播日志消息。在本教程中,我们将为其添加一个功能——我们将使仅订阅消息的一个子集成为可能。例如,我们将能够仅将关键错误消息定向到日志文件(以节省磁盘空间),同时仍然能够在控制台上打印所有日志消息。 绑定......
  • 4、RabbitMQ队列之发布/订阅模式【RabbitMQ官方教程】
    在前面的教程中,我们创建了一个工作队列。工作队列背后的假设是,每个任务只传递给一个工作者。在这一部分中,我们将做一些完全不同的事情——我们将向多个消费者传递一个信息。这种模式被称为“发布/订阅”。为了说明这种模式,我们将构建一个简单的日志系统。它将由两个程序组成——......
  • rabbitmq学习笔记
    RabbitMQ简介简介2006年,AMQP规范发布。2007年,Rabbit技术公司基于AMQP标准开发的RabbitMQ1.0发布AMQP​AMQP,即AdvancedMessageQueuingProtocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议......
  • rabbitmq-1
    1.消息队列点到点模式发布订阅模式2.rabbitMQ简介3.AMQP协议4.工作原理图及核心概念原理图核心概念Broker:接收和分发消息的应用,RabbitMQServer就是MessageBrokerVirtualhost:出于多租户和安全因素设计的,把AMQP的基本组件划分到一个虚拟的分组中,类似于网络中......