当前位置: 首页 > news >正文

发送方确认

在使用RabbitMQ的时候,可以通过消息持久化来解决因为服务器的异常而导致的消息就是,但是还有一个问题,当消息的生产者将消息发送出去之后,消息到底有没有正确地到达服务器呢?如果消息在到达服务器之前已经丢失,持久化操作也解决不了这个问题,那么该如何解决呢?

RabbitMQ为我们提供了两种解决方案:

1.通过事务机制实现

2.通过发送方确认机制实现

因为事务机制比较消耗性能,在实际工作中使用也不多,在这里主要介绍confirm机制来实现发送方的确认.RabbitMQ为我们提供了两个方式来控制消息的可靠性投递

1.confirm确认模式

生产者在发送消息的时候,对发送端设置了一个ConfirmCallback的监听,无论消息是否到达Exchange,这个监听都会被执行,如果Exchange成功收到,ACK确认字符为true,如果没有收到消息 ACK就为false.

在这里要讲一下ConfirmCallback和ConfirmListener区别:

两者都是用来处理消息确认的机制,但他们属于不同的客户端库,并且使用场景和方式有所不同.

1.ConfirmListener时RabbitMQ java Client库中的接口,这个库时RabbitMQ官方提供的一个直接与RabbitMQ服务器交互的客户端库,它提供了两个方法:handleAck和handleNack,用于处理消息确认和否定的事件.

2.ConfirmCallback是Spring AMQP框架中的一个接口,专门为Spring环境设计,用于简化与RabbitMQ交互的过程,它只包含一个confirm方法,用于处理消息确认的回调

在Spring Boot应用中,通常会使用ConfirmCallback,因为它与Spring框架的其他部分更加整合,可以利用Spring的配置和依赖注入功能,而在使用RabbitMQ java Client库时,则可能会直接实现ConfirmListener接口,更直接的与RabbitMQ的Channel交互.

2.return退回模式

消息到达Exchange之后,会根据路由规则匹配,把消息放入Queue中,Exchange到Queue的过程,如果一条消息无法被任何队列消费,可以选择把消息退回给发送者.消息退回给发送者时,我们可以设置一个返回回调方法,对消息进行处理.

使⽤RabbitTemplate的setMandatory⽅法设置消息的mandatory属性为true(默认为false). 这个属性
的作⽤是告诉RabbitMQ, 如果⼀条消息⽆法被任何队列消费, RabbitMQ应该将消息返回给发送者, 此时 ReturnCallback 就会被触发
http://www.lryc.cn/news/480451.html

相关文章:

  • 如何使用HighBuilder前端开发神器
  • 发现了NitroShare的一个bug
  • 如何关闭 Ubuntu22.04 LTS 的更新提醒
  • 美术资源规范
  • UE5.4 PCG 获取地形Layer
  • 用 cURL 控制 OpenSIPS3.4
  • 【LuatOS】基于WebSocket的同步请求框架
  • 架构师考试系列(8)论文专题:信息系统安全设计
  • 浙大一附院就医:分享给大家工作久了关节疼的就医经验,腱鞘炎
  • 如何降低 PCIe RTT?
  • 数据结构之二叉树--前序,中序,后序详解(含源码)
  • 红黑树及MySQL 基础架构
  • 大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和
  • QJson-趟过的各种坑(先坑后用法)
  • 基于STM32的hx711称重模块使用
  • Nginx独立项目相关配置说明
  • Nuxt3之使用lighthouse性能测试及性能优化实操
  • ‌webdriver.Chrome()参数简介
  • Ubuntu如何更换环境中的Python版本
  • python-字符串中大写字母转小写,小写字母转大写
  • 前端学习之ES6+
  • yolov10的几种权重文件
  • FPGA视频GTH 8b/10b编解码转PCIE3.0传输,基于XDMA中断架构,提供工程源码和技术支持
  • C++类和对象 (下)
  • 网络层5——IPV6
  • 【wpf】ResourceDictionary 字典资源的用法
  • Foliate:沉浸式阅读!!!
  • 【excel基本操作-sumif绝对引用和相对引用
  • word及Excel常见功能使用
  • 网页中的某个元素高度突然无法设置