RabbitMQ如何保证消息可靠
解决办法:
1、做好消息确认机制(pulisher、consumer[手动ACK])
2、每一个发送的消息都在数据库做好记录。定期将失败的消息再次发送一遍
消息确认机制:
生产者确认模式:确认消息是否发送到broker,失败原因是什么。配置类@PostConstruct方法里,调用setConfirmCallback()方法,参数是Lambda表达式
生产者退回模式:确认消息是否发送到队列。配置类@PostConstruct方法里,调用setReturnCallback()方法,参数是Lambda表达式
消费者ack机制:消费者方法的Channel参数、Message参数、消息实体类参数。一定要手动ack,消费成功才移除消息。
/*** 定制RabbitTemplate* 1、服务器收到消息就回调* 1、spring.rabbitmq.publisher-confirms=true* 2、设置确认回调ConfirmCallback* 2、消息正确抵达队列进行回调* 1、 spring.rabbitmq.publisher-returns=true* spring.rabbitmq.template.mandatory=true* 2、设置确认回调ReturnCallback** 3、消费端确认(保证每个消息被正确消费,此时才可以broker删除这个消息)。* spring.rabbitmq.listener.simple.acknowledge-mode=manual 手动签收* 1、默认是自动确认的,只要消息接收到,客户端会自动确认,服务端就会移除这个消息* 问题:* 我们收到很多消息,自动回复给服务器ack,只有一个消息处理成功,宕机了。就会发生消息丢失;* 消费者手动确认模式。只要我们没有明确告诉MQ,货物被签收。没有Ack,* 消息就一直是unacked状态。即使Consumer宕机。消息不会丢失,会重新变为Ready,下一次有新的Consumer连接进来就发给他* 2、如何签收:* channel.basicAck(deliveryTag,false);签收;业务成功完成就应该签收* channel.basicNack(deliveryTag,false,true);拒签;业务失败,拒签*/
// @PostConstruct //MyRabbitConfig对象创建完成以后,执行这个方法public void initRabbitTemplate(){//设置确认回调rabbitTemplate.setConfirmCallback(new RabbitTemplate.ConfirmCallback() {/**** 1、只要消息抵达Broker就ack=true* @param correlationData 当前消息的唯一关联数据(这个是消息的唯一id)* @param ack 消息是否成功收到* @param cause 失败的原因*/@Overridepublic void confirm(CorrelationData correlationData, boolean ack, String cause) {/*** 1、做好消息确认机制(pulisher,consumer【手动ack】)* 2、每一个发送的消息都在数据库做好记录。定期将失败的消息再次发送一遍*///服务器收到了;//修改消息的状态System.out.println("confirm...correlationData["+correlationData+"]==>ack["+ack+"]==>cause["+cause+"]");}});//设置消息抵达队列的确认回调rabbitTemplate.setReturnCallback(new RabbitTemplate.ReturnCallback() {/*** 只要消息没有投递给指定的队列,就触发这个失败回调* @param message 投递失败的消息详细信息* @param replyCode 回复的状态码* @param replyText 回复的文本内容* @param exchange 当时这个消息发给哪个交换机* @param routingKey 当时这个消息用哪个路由键*/@Overridepublic void returnedMessage(Message message, int replyCode, String replyText, String exchange, String routingKey) {//报错误了。修改数据库当前消息的状态->错误。System.out.println("Fail Message["+message+"]==>replyCode["+replyCode+"]==>replyText["+replyText+"]===>exchange["+exchange+"]===>routingKey["+routingKey+"]");}});}
相关文章:
RabbitMQ如何保证消息可靠
解决办法: 1、做好消息确认机制(pulisher、consumer[手动ACK]) 2、每一个发送的消息都在数据库做好记录。定期将失败的消息再次发送一遍 消息确认机制: 生产者确认模式:确认消息是否发送到broker,失败…...
学习笔记——路由网络基础——路由的高级特性
七、路由的高级特性 1、路由迭代(路由递归) 路由必须有直连的下一跳才能够指导转发,静态路由或BGP路由的下一跳可能不是直连的邻居,因此需要计算出一个直连的下一跳和对应的出接口,这个过程就叫做路由迭代(路由递归)。 添加一条去往20.1.1.…...
网络编程之XDP、TC和IO_URING以及DPDK
一、网络编程常见的技术 在前面已经分析过了XDP、TC和eBPF。也基本把三者间的关系理清了,但现在又有一个疑惑涌了上来。在前面提到过的IO_URING和DPDK与这些技术有什么关系呢?其实只要认真的看过分析文章可能大家心里都已经基本清楚了。 正如在前面不断…...
晶谷高温烧结导电浆料用低熔点玻璃粉 晶谷耐高温导电漆导电油墨高温玻璃粉
晶谷浆料玻璃粉是一种用于电子浆料的材料,它在电子浆料中起到粘结和降低烧结温度的作用,能够提高浆料与基材之间的结合力。 浆料玻璃粉的性能特点包括: - 软化点:软化点在350至650度之间。 - 热膨胀系数:热膨胀系数…...
【Mysql】DQL操作单表、创建数据库、排序、聚合函数、分组、limit关键字
DQL操作单表 1.1 创建数据库 •创建一个新的数据库 db2 CREATE DATABASE db2 CHARACTER SET utf8;•将db1数据库中的 emp表 复制到当前 db2数据库 ** 1.2 排序** 通过 ORDER BY 子句,可以将查询出的结果进行排序 (排序只是显示效果,不会影响真实数据) 语法结构:…...
Excel 常用技巧(四)
Microsoft Excel 是微软为 Windows、macOS、Android 和 iOS 开发的电子表格软件,可以用来制作电子表格、完成许多复杂的数据运算,进行数据的分析和预测,并且具有强大的制作图表的功能。由于 Excel 具有十分友好的人机界面和强大的计算功能&am…...
【Linux 基础】文件与目录管理
1. 文件和目录的基本概念 文件:是数据的集合,可以是文本、图像、视频等。 目录(也称为文件夹):是文件和子目录的集合,用于组织文件。 2. 目录和路径 绝对路径:从根目录(/&#x…...
C++系列-String(一)
🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” string是用于字符串,可以增删改查 首先,我们来看一下string的底层 接下来,我们来看一下string的常用接口有哪些: #define _CRT_S…...
服务器硬件的基础知识
引言 服务器是现代数据中心和企业IT基础设施的核心组成部分。了解服务器硬件的基本知识不仅有助于选择和维护服务器,还能提高系统性能和可靠性。本文将详细介绍服务器硬件的各个方面,包括处理器、内存、存储、网络、散热和电源等,帮助读者全…...
java基于ssm+jsp 汽车在线销售系统
1 前台功能模块 网站首页 网页首页汽车在线销售系统模块如下:首页、汽车信息、新闻资讯、留言反馈、我的收藏管理等功能图1 图1网页首页 网页前台车辆信息效果图如图2所示 图2 车辆信息界面图 2 管理员功能模块 管理员输入个人的账号、密码登录系统,…...
【干货】Android中高级开发进阶必备资料(附:PDF+视频+源码笔记)
4、数据传输与序列化 5、Java虚拟机原理 6、高效IO 设计思想解读开源框架 随着互联网企业的不断发展,产品项目中的模块越来越多,用户体验要求也越来越高,想实现小步快跑、快速迭代的目的越来越难,插件化技术应用而生。如果没有…...
AI通用写作模版,可以在此基础上进行修改
指令 角色 作者 :你是一位自媒体爆文写作专家,负责撰写文章,具备对特定主题的深入理解和一定的写作技巧。读者 :25-55岁通用人群,对资讯新闻类感兴趣,需要易于理解且富有启发性的内容。 技能 研究能力&…...
openEuler2203SP3自定义ios
需求: 1、legacy启动 2、/boot分区1G,剩余给/,lvm分区 3、创建root密码和一个普通用户user,密码Hello2024 4、服务器安装(选上development、legacy-unix、security-tools) 5、关闭firewalld、selinux …...
一年又一年志愿
--第一篇 20220624十年苦读,青春飞扬,其道大光,来日方长。又是一年高考时,高考改变命运,但是后面还有更关键几步,跟大家一起聊聊。之前写我考状元的经历,堂弟考省前十的经历,有不少…...
NL2SQL进阶系列(1):DB-GPT-Hub、SQLcoder、Text2SQL开源应用实践详解
1. MindSQL(库) MindSQL 是一个 Python RAG(检索增强生成)库,旨在仅使用几行代码来简化用户与其数据库之间的交互。 MindSQL 与 PostgreSQL、MySQL、SQLite 等知名数据库无缝集成,还通过扩展核心类,将其功能扩展到 Sn…...
OpenGL3.3_C++_Windows(15)
理解glad: OpenGL只是一个标准/规范,具体的实现是由驱动开发商针对特定显卡实现的,由于OpenGL驱动版本众多,它大多数函数的位置都无法在编译时确定下来,需要在运行时查询,因此开发者需要在运行时获取函数…...
NeRF从入门到放弃5: Neurad代码实现细节
Talk is cheap, show me the code。 CNN Decoder 如patch设置为32x32,patch_scale设置为3,则先在原图上采样96x96大小的像素块,然后每隔三个取一个像素,降采样成32x32的块。 用这32x32个像素render feature,再经过CNN反卷积预测…...
【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【11】ElasticSearch
持续学习&持续更新中… 守破离 【雷丰阳-谷粒商城 】【分布式高级篇-微服务架构篇】【11】ElasticSearch 简介基本概念ElasticSearch概念-倒排索引安装基本命令Mapping-映射ElasticSearch7-去掉type概念Es-数组(数组装着Object)的扁平化处理ik 分词…...
Pip换源详解
Pip换源是指将pip(Python的包管理工具)的默认源更改为其他源。以下是关于Pip换源的详细说明: 一、Pip换源的原因 访问被阻止的源:在某些地区或网络环境下,直接访问官方的Python Package Index (PyPI) 可能受到限制或…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
