Rabbitmq 消息可靠性保证

1、简介

        消息的可靠性投递就是要保证消息投递过程中每一个环节都要成功,本文详细介绍两个环节的消息可靠性传递方式:1)、消息传递到交换机的 confirm 模式;2)、消息传递到队列的 Return 模式。

消息从 producer 到 exchange 则会返回一个 confirmCallback;

 消息从 exchange 到 queue 投递失败则会返回一个 returnCallback;

2、Confirm模式

        消息的confirm确认机制,是指生产者投递消息后,到达了消息服务器Broker里面的exchange交换机,则会给生产者一个应答,生产者接收到应答,用来确定这条消息是否正常的发送到Broker的exchange中,这也是消息可靠性投递的重要保障。

2.1、使用confirm模式的具体步骤

1)、配置文件application.yml 开启确认模式

spring:rabbitmq:host: 192.168.30.88port: 5672username: adminpassword: adminvirtual-host: testpublisher-confirm-type: correlated   # 开启数据关联确认机制

2)、组件绑定关系配置(采用直连交换机模式)

@SpringBootConfiguration
@ConfigurationProperties(prefix = "rabbit.confirm")
public class RabbitConfigCommit {private String exchangeName;private String queueName;@Beanpublic DirectExchange directExchange(){return ExchangeBuilder.directExchange(exchangeName).build();}@Beanpublic Queue queue(){return QueueBuilder.durable(queueName).build();}public Binding bindingA(DirectExchange exchange, Queue queue){return BindingBuilder.bind(queue).to(exchange).with("info");}
}

3)、写一个类实现implements RabbitTemplate.ConfirmCallback,判断成功和失败的ack结果,可以根据具体的结果,如果ack为false,对消息进行重新发送记录日志等处理;设置rabbitTemplate的确认回调方法rabbitTemplate.setConfirmCallback(messageConfirmCallBack);

@Service
public class MessageServiceConfirm implements RabbitTemplate.ConfirmCallback {@Autowiredprivate RabbitTemplate rabbitTemplate;@PostConstructpublic void init(){rabbitTemplate.setConfirmCallback(this);}public void sendMsg(){Message message = MessageBuilder.withBody("hello long".getBytes()).build();// 设置消息关联数据CorrelationData correlationData = new CorrelationData();correlationData.setId("123");rabbitTemplate.convertAndSend("exchange.confirm", "info", message, correlationData);}
// 消息确认返回判断@Overridepublic void confirm(CorrelationData correlationData, boolean b, String s) {if (b){System.out.println("消息发送到交换机成功!" + correlationData.getId());return;}System.out.println("消息发送到交换机失败!" + correlationData.getId());}
}
3、Return 模式
3.1、使用 retrun 模式的具体步骤(和confirm 模式一致)

1)、配置文件application.yml 开启 retrun 模式

spring:rabbitmq:host: 192.168.30.88port: 5672username: adminpassword: adminvirtual-host: testpublisher-confirm-type: correlatedpublisher-returns: true  # 开启Return模式

2)、组件配置(参考confirm模式)

3)、使用rabbitTemplate.setReturnCallback设置退回函数,当消息从 exchange 路由到 queue 失败后,则会将消息退回给producer,并执行回调函数 returnedMessage(采用匿名内部类/lambda表达式实现)

@Service
public class MessageServiceReturn {@Autowiredprivate RabbitTemplate rabbitTemplate;@PostConstructpublic void init(){// 不使用匿名内部类,就要实现接口 implements RabbitTemplate.ReturnsCallbackrabbitTemplate.setReturnsCallback(msg -> {System.out.println("消息发送结果:" + msg.getReplyText());});
//        rabbitTemplate.setReturnsCallback(new RabbitTemplate.ReturnsCallback(){
//            @Override
//            public void returnedMessage(ReturnedMessage returnedMessage) {
//                System.out.println("消息发送结果:" + returnedMessage.getReplyText());
//            }
//        });}public void sendMsg(){Message message = MessageBuilder.withBody("hello long".getBytes()).build();rabbitTemplate.convertAndSend("exchange.return", "info", message, correlationData);}
}
4、总结

        本文详细介绍两种模式的消息可靠性保证,关于Rabbitmq 消息持久化、集群配置等更高级的内容关注下面公众号查阅。

        本人是一个从小白自学计算机技术,对运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

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

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

相关文章

Msa全球最新研究:多系统萎缩特效药全球最新进展?

多系统萎缩,是一种以神经系统为主的遗传性疾病,典型症状表现为运动障碍、自主神经功能障碍和认知障碍等。对于这种疾病,西医目前尚未有明确的根治办法,大多数医生只能通过药物缓解患者的症状,但无法彻底治愈。 然而&a…

第9章 正则表达式

学习目标 熟悉正则表达式,能够说出正则表达式的概念和作用 掌握正则表达式的创建,能够使用两种方式创建正则表达式 掌握正则表达式的使用,能够使用正则表达式进行字符串匹配 掌握正则表达式中元字符的使用,能够根据需求选择合适的元字符 掌握正则表达式中模式修饰符的使用,…

CDN加速之HTTPS配置

记录一下HTTPS配置的免费证书配置 2张图搞定 最后补充说明: 由于CDN采用的Tengine服务基于Nginx,因此开启HTTPS安全加速功能的加速域名,只支持上传Nginx能读取的PEM格式的证书。如果证书不是PEM格式,需转换成PEM格式。转换方法&a…

C#,字符串匹配(模式搜索)KMP算法的源代码与数据可视化

D.E.Knuth J.H.Morris 一、KMP算法 KMP 算法(Knuth-Morris-Pratt 算法)是其中一个著名的、传统的字符串匹配算法,效率比较高。 KMP算法由D.E.Knuth,J.H.Morris和V.R.Pratt在 Brute-Force算法的基础上提出的模式匹配的改进算法。…

江山易改本性难移之ZYNQ SDK QSPI固化bug及其解决方法

之前在Vivado2018.3通过QSPI方式固化程序时出现问题,显示flash擦除成功,但最后总是不能写入到flash中。 查资料发现从VIVADO 2017.3版本开始,Xilinx官方为了使Zynq-7000和Zynq UltraScale 实现流程相同,在QSPI FLASH使用上做了变化…

基于JAVA+SpringBoot的高校学术报告系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 智慧高校学术报告系统…

【SpringCloud】之入门级及nacos的集成使用

🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是君易--鑨,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的博客专栏《SpringCloud开发之入门级及nacos》。&#x1f3…

设计模式面试

C 面向对象设计 封装:隐藏内部实现继承:复用现有代码多态:改写对象行为 设计模式关键在于分解和抽象; 设计模式的主要目的是易于变化 面向对象设计原则–比设计模式更加重要 违背了设计原则,设计模式是错误的。 依赖倒置原则…

你们做外贸主要的获客渠道有哪些?

昨天跟一个同行朋友聊天,他原本主打产品是做动力类的,这两年竞争太大,订单也减少了很多。为了求发展,就拓品了,而拓展的新品刚好是我们这一块,而且非常迅速地找到场地把生产线弄了起来,还不断扩…

严格次小生成树(LCA+Kruskal)

一、次小生成树 次小生成树是指在给定的无向图中,如果存在最小生成树和次小生成树,那么对于任何一颗最小生成树来看,都存在一颗次小生成树,使得这两棵树只有一条边不同。次小生成树的边权和大于等于最小生成树的另一颗树&#xf…

RT-DETR 更换骨干网络之 MobileNetV3 | 《搜寻 MobileNetV3》

论文地址:https://arxiv.org/abs/1905.02244 代码地址:https://github.com/xiaolai-sqlai/mobilenetv3 我们展示了基于互补搜索技术和新颖架构设计相结合的下一代 MobileNets。MobileNetV3通过结合硬件感知网络架构搜索(NAS)和 NetAdapt算法对移动设计如何协同工作,利用互…

IntelliJ IDEA如何使用固定地址公网远程访问本地Mysql数据库

文章目录 1. 本地连接测试2. Windows安装Cpolar3. 配置Mysql公网地址4. IDEA远程连接Mysql小结 5. 固定连接公网地址6. 固定地址连接测试 IDEA作为Java开发最主力的工具,在开发过程中需要经常用到数据库,如Mysql数据库,但是在IDEA中只能连接本…

前端面试题集合五(css)

CSS 面试知识点总结 本部分主要是笔者在复习 CSS 相关知识和一些相关面试题时所做的笔记,如果出现错误,希望大家指出! 目录 1.介绍一下标准的 CSS 的盒子模型?低版本 IE 的盒子模型有什么不同的?2.CSS 选择符有哪些…

Linux学习记录(二)

组管理和权限管理 组的基本介绍 在Linux中每个用户必须属于一个组,不能独立于组外; 在Linux中每个文件有所有者、所在组、其他组的概念。 一般来说谁创建了文件,谁就是文件的所有者,用户所在组就是该文件的所在组。 查看文件的…

Apache ECharts | 一个数据可视化图表库

文章目录 1、简介1.1、主要特点1.2、使用场景 2、安装方式一:从下载的源代码或编译产物安装方法二:从 npm 安装方法三:⭐定制安装echarts.js 3、使用 官网: 英语:https://echarts.apache.org/en/index.html 中文&a…

Vue-4、单向数据绑定与双向数据绑定

1、单向数据绑定 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>数据绑定</title><!--引入vue--><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/…

linux(ubuntu)中crontab定时器命令详解 以及windows中定时器

linux&#xff08;ubuntu&#xff09;中crontab定时器命令详解 crontab 是一个用于创建、编辑和管理用户的定时任务的命令&#xff0c;它可以让用户在指定的时间自动执行指定的命令或脚本。 基本语法 -e&#xff1a;编辑用户的 crontab 文件&#xff1b;-l&#xff1a;列出用…

【机器学习】常见算法详解第2篇:K近邻算法各种距离度量(已分享,附代码)

本系列文章md笔记&#xff08;已分享&#xff09;主要讨论机器学习算法相关知识。机器学习算法文章笔记以算法、案例为驱动的学习&#xff0c;伴随浅显易懂的数学知识&#xff0c;让大家掌握机器学习常见算法原理&#xff0c;应用Scikit-learn实现机器学习算法的应用&#xff0…

Java18:网络编程

一.对象序列化&#xff1a; 1.对象流&#xff1a; ObjectInputStream 和 ObjectOutputStream 2.作用&#xff1a; ObjectOutputSteam&#xff1a;内存中的对象-->存储中的文件&#xff0c;通过网络传输出去 ObjectInputStream:存储中的文件&#xff0c;通过网络传输出去…

【漏洞复现】ActiveMQ文件上传漏洞(CVE-2016-3088)

Nx01 产品简介 Apache ActiveMQ是Apache软件基金会所研发的开放源代码消息中间件。ActiveMQ是消息队列服务&#xff0c;是面向消息中间件&#xff08;MOM&#xff09;的最终实现&#xff0c;它为企业消息传递提供高可用、出色性能、可扩展、稳定和安全保障。 Nx02 漏洞描述 Ap…