RabbitMq-消息确认机制-消息队列可靠投递

server/2025/3/3 10:22:42/

RabbitMq-消息确认机制-消息队列可靠投递

请添加图片描述

发送端确认
ConfirmCallback

请添加图片描述

在spring中开启ConfirmCallback

springboot rabbitmq属性配置spring.rabbitmq.publisher-confirm和spring.rabbitmq.publisher-confirm-type详解_弃用的配置属性 'spring.rabbitmq.publisher-confirms-CSDN博客

# 这个属性在新版RabbitMq中已经被弃用
# spring.rabbitmq.publisher-confirms = true 
spring.rabbitmq.publisher-confirm-type = correlated #新版本使用这个属性
@Configuration
public class MyRabbitConfig {@AutowiredRabbitTemplate rabbitTemplate;@PostConstruct //MyRabbitConfig对象创建完成以后,执行这个方法public void initRabbitTemplate() {// 设置确认回调rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {@Overridepublic void confirm(CorrelationData correlationData, boolean b, String s) {System.out.println("...");}});}
}

correlationData是消息的唯一id,在发送消息的时候可以显性设置这个id。如下:

rabbitTemplate.convertAndSend("hello-java-exchange", "hello.java",reasonEntity,new CorrelationData(UUID.randomUUID().toString()));

如果在配置配置类的过程中出现依赖循环,可以试试在application.properties中加上:

spring.main.allow-circular-references=true
returnCallback

请添加图片描述

配置文件中添加:

#开启发送端 抵达 队列的确认
spring.rabbitmq.publisher-returns=truespring.rabbitmq.template.mandatory=true

在配置文件中添加:

rabbitTemplate.setReturnsCallback(new RabbitTemplate.ReturnsCallback() {@Overridepublic void returnedMessage(ReturnedMessage returnedMessage) {System.out.println(returnedMessage.toString());}});

在更新的spring版本中,使用ReturnsCallback接口进行回调。

完整的配置文件如下:ConfirmCallbackreturnCallback

@Configuration
public class MyRabbitConfig {@AutowiredRabbitTemplate rabbitTemplate;@PostConstruct //确保rabbitTemplate注入完成后,执行这个方法,否则可能会返回空指针异常public void initRabbitTemplate() {// 设置确认回调rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {@Overridepublic void confirm(CorrelationData correlationData, boolean b, String s) {System.out.println("回调成功" + b);}});rabbitTemplate.setReturnsCallback(new RabbitTemplate.ReturnsCallback() {@Overridepublic void returnedMessage(ReturnedMessage returnedMessage) {System.out.println(returnedMessage.toString());}});}
}
ack

请添加图片描述

配置文件中添加:

spring.rabbitmq.listener.simple.acknowledge-mode=manual

默认确认模式为Auto(自动确认),其余取值有Manual(手动确认)和None(不确认)。

自动确认模式下,当方法获取到消息就立即向mq服务器返回确认,而不是等待直到方法完成。

配置手动确认

long deliveryTag=message.getMessageProperties().getDeliveryTag();
try{// false表示仅确认当前的消息channel.basicAck(deliveryTag,false);
}catch(Exception e){//网路中断
}

deliveryTag是 RabbitMQ 为每条消息生成的唯一标识符,用于消息的确认和重试机制。它是一个单调递增的 64 位长整型值,每个通道(Channel)独立维护,因此在每个通道上是唯一的。

举例:一条通道内的第一条消息,它的deliveryTag是1,第二条则是2,第三条是3,如此递增

不确认拒签

try{//不确认// 第一个false的参数名为multiple,表示仅是否批量处理;第二个false的参数名为requeue,表示仅是否重新入队//long deliveryTag, boolean mutiple, boolean requeuechannel.basicNack(deliveryTag,false,false);//拒签//long deliveryTag, boolean requeuechannel.basicReject(deliveryTag,false);
}catch(Exception e){//网路中断
}

http://www.ppmy.cn/server/172034.html

相关文章

计算机毕业设计SpringBoot+Vue.js智能无人仓库管理系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

springboot+dubbo+zookeeper的注册服务和调用实践

目录 zookeeper为什么可作为注册中心zookeeper注册中心优缺点启动zookeeper编写springboot项目提供dubbo服务1. 服务接口2. Springboot引入dubbo实现服务接口2.1 工程目录和依赖2.2 启动程序和application.properties2.3 DubboService 实现服务接口2.4 测试api,用于…

【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter28-最佳实践

二十八、最佳实践 最佳实践 自 2000 年以来,Web 开发一直在以惊人的速度发展。从最初毫无章法可循的“野蛮生长”,到如今已发展出完整的规范体系,各种研究成果和最佳实践层出不穷。随着简单的网站变成复杂的 Web 应用程序,曾经的 …

【2025-03-02】基础算法:二叉树 相同 对称 平衡 右视图

📝前言说明: ●本专栏主要记录本人的基础算法学习以及LeetCode刷题记录,主要跟随B站博主灵茶山的视频进行学习,专栏中的每一篇文章对应B站博主灵茶山的一个视频 ●题目主要为B站视频内涉及的题目以及B站视频中提到的“课后作业”。…

神经网络代码入门解析

神经网络代码入门解析 import torch import matplotlib.pyplot as pltimport randomdef create_data(w, b, data_num): # 数据生成x torch.normal(0, 1, (data_num, len(w)))y torch.matmul(x, w) b # 矩阵相乘再加bnoise torch.normal(0, 0.01, y.shape) # 为y添加噪声…

目前主流 AI 大模型体系全解析:架构、特点与应用

大家好,我是大 F,深耕AI算法十余年,互联网大厂技术岗。分享AI算法干货、技术心得。 欢迎关注《大模型理论和实战》、《DeepSeek技术解析和实战》,一起探索技术的无限可能! 阅读完本文,您将知道:目前主流的大模型体系有哪些?及其架构的特点。 前言 在自然语言处理(NL…

微服务测试

微服务架构是一种将应用程序设计为一组小型、独立服务的方法,每个服务实现特定的业务功能,并通过定义良好的 API 进行通信。由于微服务架构的复杂性,测试微服务变得尤为重要。以下是一些微服务测试的实践和策略: 微服务测试的挑战 服务间的依赖:微服务之间存在复杂的依赖…

【机器学习chp10】降维——(核化)PCA + MDS + lsomap + 拉普拉斯特征映射 + t-NSE + UMAP

目录 一、降维的意义与本质 1、意义 2、本质 3、常见降维方法 (1)线性降维 (2)非线性降维 二、基于重构的降维 1、PCA 2、核化PCA (1)实现过程 步骤一:数据映射与核函数定义 步骤二…