springBoot整合RabbitMq实现手动确认消息

如何保证消息的可靠性投递?

1.保证生产者向broke可靠性投递,开启ack投递成功确认,如果失败的话进行消息补偿

/*** @author yueF_L* @date 2023-08-10 01:32* ConfirmCallback:消息只要被 RabbitMQ broker 接收到就会触发confirm方法。*/
@Slf4j
@Component
public class ConfirmCallbackService implements RabbitTemplate.ConfirmCallback {@Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {if (!ack) {log.error("confirm==>发送到broker失败\r\n" +"correlationData={}\r\n" + "ack={}\r\n" + "cause={}",correlationData, ack, cause);} else {log.info("confirm==>发送到broker成功\r\n" +"correlationData={}\r\n" + "ack={}\r\n" + "cause={}",correlationData, ack, cause);}}

2. 保证消息能投敌到目标 queue

/*** @author yueF_L* @date 2023-08-10 01:29* ReturnCallback:如果消息未能投递到目标 queue 里将触发returnedMessage方法。* 若向 queue 投递消息未成功,可记录下当前消息的详细投递数据,方便后续做重发或者补偿等操作。*/
@Slf4j
@Component
public class ReturnCallbackService implements RabbitTemplate.ReturnCallback {@Overridepublic void returnedMessage(Message message, int replyCode, String replyText,String exchange, String routingKey) {log.info("returnedMessage==> \r\n" + "message={}\r\n" + "replyCode={}\r\n" +"replyText={}\r\n" + "exchange={}\r\n" + "routingKey={}",message, replyCode, replyText, exchange, routingKey);}
}

将配置set到rabbitTemplate

/*** @author yueF_L* @date 2023-08-10 01:25* 消息队列配置*/
@Slf4j
@Configuration
@RequiredArgsConstructor
public class RabbitMQConfig {private final ConfirmCallbackService confirmCallbackService;private final ReturnCallbackService returnCallbackService;@BeanRabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);// 开启失败通知rabbitTemplate.setMandatory(true);rabbitTemplate.setConfirmCallback(confirmCallbackService);rabbitTemplate.setReturnCallback(returnCallbackService);return rabbitTemplate;}
}

yml配置

 代码中的调用

 

  @RabbitListener(queues = TtlQueueConfig.DEAD_LETTER_QUEUE_TELEPHONE_BILL)public void receiveD(Message message, Channel channel) {try {try {String msg = new String(message.getBody());// 模拟异常,测试重试int a = 1 / 0;//apiService.doApiHeartChainTelephoneBillOrder(msg);// 手动确认消息channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);log.info("当前时间:{},收到话费死信队列信息:{}", new Date(), msg);}catch (Exception e){//参数1:消费消息的index//参数2:是否批量否定多个消息,设为false就与basicReject功能一样,triue的前提也是在同一个channel,且在该消息否定前存在未确认的消息//参数3: 对异常消息的处理,true表示重排序,false表示丢弃// 如果拒绝消息,要求mq重发的话,一直异常会进入死循环//channel.basicNack(message.getMessageProperties().getDeliveryTag(), false, true);log.error(TtlQueueConfig.DEAD_LETTER_QUEUE_TELEPHONE_BILL + " 消息反馈失败,param:{}", message.getBody());throw e;}} catch (Exception e) {log.error("监听RabbitMq、队列:" + TtlQueueConfig.DEAD_LETTER_QUEUE_TELEPHONE_BILL + "发生异常:"+ e.getMessage());throw new CustomException("监听RabbitMq、队列:" + TtlQueueConfig.DEAD_LETTER_QUEUE_TELEPHONE_BILL + "发生异常:"+ e.getMessage());}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/86681.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

logback日志框架学习(1)介绍logback

首先说下对日志框架的感受,很多人slf4j-api slf4j-simple logback-core logbak-classic log4j logj42很多的日志框架,控制台各种输出的时候日志框架warn error,有时候还不能输出日志。究其原因,大家都觉得日志框架不太重要&#x…

NSS [UUCTF 2022 新生赛]ez_upload

NSS [UUCTF 2022 新生赛]ez_upload 考点:Apache解析漏洞 开题就是标准的上传框 起手式就是传入一个php文件,非常正常的有过滤。 .txt、.user.ini、.txxx都被过滤了,应该是白名单或者黑名单加MIME过滤,只允许.jpg、.png。 猜测二…

阿里云服务器部署RabbitMQ流程

阿里云百科分享使用阿里云服务器部署RabbitMQ流程,RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件,用于在分布式系统中存储转发消息,有良好的易用性、扩展性和高可用性。本文介绍如何通过ECS实例部署Rabbi…

四化智造MES(API)与金蝶云星空对接集成派工作业打通生产订单新增

四化智造MES(API)与金蝶云星空对接集成派工作业打通生产订单新增 对接系统:四化智造MES(API) MES建立统一平台上通过物料防错防错、流程防错、生产统计、异常处理、信息采集和全流程追溯等精益生产和精细化管理&#x…

objectMapper.configure 方法的作用和使用

objectMapper.configure 方法是 Jackson 提供的一个用于配置 ObjectMapper 对象的方法。ObjectMapper 是 Jackson 库的核心类,用于将 Java 对象与 JSON 数据相互转换。 configure 方法的作用是设置 ObjectMapper 的配置选项,例如设置日期格式、设置序列…

年轻代频繁GC ParNew导致http变慢

背景介绍 某日下午大约四点多,接到合作方消息,线上环境,我这边维护的某http服务突然大量超时(对方超时时间设置为300ms),我迅速到鹰眼平台开启采样,发现该服务平均QPS到了120左右,平…

1.Fay-UE5数字人工程导入(UE数字人系统教程)

非常全面的数字人解决方案(含源码) Fay-UE5数字人工程导入 1、工程下载:xszyou/fay-ue5: 可对接fay数字人的ue5工程 (github.com) 2、ue5下载安装:Unreal Engine 5 3、ue5插件安装 依次安装以下几个插件 4、双击运行工程 5、切换中文 6、检…

Zookeeper与Kafka

Zookeeper与Kafka 一、Zookeeper 概述1.Zookeeper 定义2.Zookeeper 工作机制3.Zookeeper 特点4.Zookeeper 数据结构5.Zookeeper 应用场景6.Zookeeper 选举机制 二、部署 Zookeeper 集群1.准备 3 台服务器做 Zookeeper 集群2.安装 Zookeeper3.拷贝配置好的 Zookeeper 配置文件到…

Could not resolve host: mirrorlist.centos.org; Unknown error解决方法

今天服务器安装完CentOS系统后,安装网络的时候,出现无法联网yum yum -y install net-tools 以上代码无法运行并报错,这里我要提醒大家,如果在初始安装的时候选中安装网络工具模块就不用在安装net-tools了,因为我选中…

k8s集群网络插件搭建——————解决集群notready(k8s1.20版本,docker24)

前面已经提到,在初始化 k8s-master 时并没有网络相关配置,所以无法跟 node 节点通信,因此状态都是“NotReady”。但是通过 kubeadm join 加入的 node 节点已经在k8s-master 上可以看到。 那么,这个时候我们该怎么办呢?…

开工大吉|华润鞋业二期自动化改造项目开工典礼圆满举行

2023年8月10日上午,山东百华鞋业有限公司择良辰吉时隆重举行了华润鞋业二期厂房动工仪式,公司总经理郭兴梅女士携公司管理层代表和施工单位代表参加了动工仪式。 根据公司发展规划,对未来发展的美好期许,以及公司生产与研发保持的…

Highcharts for Python Crack

Highcharts for Python Crack 修改了将数据点序列化为JavaScript文字对象的方式。 现在,如果它们的配置属性是Highcharts(JS)在JavaScript数组表示法中支持的属性,则它们被序列化为JavaScript数组。 否则,代码会回退…

QT学习笔记-QT安装oracle oci驱动

QT学习笔记-QT安装oracle oci驱动 0、背景1、环境以及条件说明2、编译驱动2.1 下载oracle instant client2.2 编译qt oci驱动2.2.1 修改oci.pro2.2.2 MinGW64构建套件编译2.2.3 MSVC2019_64构建套件编译 3、访问数据库运行成功 0、背景 在使用QT开发应用的过程中,往…

全排列——力扣46

文章目录 题目描述解法:回溯题目描述 解法:回溯 //version 1 vector<vector<int>> permute(<

Stable Diffuion webui Mac版本安装过程

系统环境 操作系统&#xff1a;MacOS Ventura13.5 芯片&#xff1a;Apple M2 Max Python: 3.10 安装前置准备 git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui.git注意事项&#xff1a;修改源码内全部 git clone 链接&#xff0c;设置代理 https://ghpr…

【小程序】Canvas 画布分享海报

成品效果图 可以通过切换下面图片形成不同的海报背景分享图 <template><view>// type"2d"必须加<canvas type"2d" :style"{width:Artwidth px,height:Artheight px, margin:0 auto}" canvas-id"firstCanvas"id&quo…

小兔鲜项目 uniapp (1)

目录 项目架构 uni-app小兔鲜儿电商项目架构 小兔鲜儿电商课程安排 创建uni-app项目 1.通过HBuilderX创建 2.通过命令行创建 pages.json和tabBar案例 uni-app和原生小程序开发区别 用VS Code开发uni-app项目 拉取小兔鲜儿项目模板代码 基础架构–引入uni-ui组件库 操…

STM32CubeMX之freeRTOS互斥量

这是大哥保护小弟的故事 高中低等级的任务 互斥量就是谁要敢插我小弟的队&#xff0c;我就要打他&#xff0c;不能让其他人插我小弟的队 互斥量的使用是默认开启的不用手动开启&#xff01; 最高优先级任务&#xff1a;延时&#xff08;10ms&#xff09;再上厕所 中间&#x…

java静默打印PDF(可实现生产环境下服务器写入PDF模板,然后调用客户端打印机打印)

java静默打印PDF可实现生产环境下服务器写入PDF模板&#xff0c;然后调用客户端打印机打印 一、简需求实现步骤 二、代码实现0、打印模板1、服务器部分 &#xff08;端口&#xff1a;8090&#xff09;1.1、maven依赖1.2、实体1.2.1、接口返回类1.2.2、标签纸页面参数类1.2.3、P…

OpenCV实例(八)车牌字符识别技术(一)模式识别

车牌字符识别技术&#xff08;一&#xff09;模式识别 1.模式识别流程2. 模式识别方式 影响并导致汽车牌照内字符出现缺损、污染、模糊等情况的常见因素有照相机的性能、采集车辆图像时光照的差异、汽车牌照的清洁度等。为了提高汽车牌照字符识别的准确率&#xff0c;本节将把英…