RabbitMQ如何保证消息不丢失
RabbitMQ 保证消息不丢失需要从‌生产者、Broker、消费者‌三个核心环节同时配置缺一不可核心是开启持久化、生产者确认和消费者手动ACK机制。一RabbitMQ如何保证消息不丢失一、生产者端确保消息成功送达Broker‌开启生产者确认机制‌发送消息后等待Broker返回ACK确认收到NACK或超时未回调时自动重试。‌设置消息回退回调‌当消息无法路由到队列时触发通知执行补偿处理避免静默丢失。二、Broker端确保消息持久化存储不丢失三重持久化配置‌交换机设置durabletrue、队列设置durabletrue、消息设置deliveryMode2将消息写入磁盘。‌高可用部署‌使用镜像队列或Quorum队列将消息同步到多节点避免单节点故障导致永久丢失。三、消费者端确保消息处理完成再确认‌关闭自动ACK‌改为手动确认模式业务逻辑处理成功后再调用basicAck发送确认信号。‌失败异常处理‌处理失败时调用basicNack将消息重新入队或转入死信队列单独处理避免消息直接丢弃。RabbitMQ消息不丢失的三个核心环节生产者确认、Broker持久化、消费者手动ACK二基于 ‌Spring Boot‌ 环境的完整配置代码与实现方案。一、application.yml 核心配置这是实现消息可靠性的基础必须开启生产者确认和消费者手动ACK。spring:rabbitmq:host:localhostport:5672username:guestpassword:guest# 1. 生产者确认机制correlated 表示异步回调确认publisher-confirm-type:correlated# 2. 消息回退机制当消息无法路由到队列时触发publisher-returns:truelistener:simple:# 3. 消费者手动ACK模式acknowledge-mode:manual# 4. 消费失败重试策略可选retry:enabled:truemax-attempts:3二、生产者端发送确认与回退处理通过实现 RabbitTemplate.ConfirmCallback 和 ReturnCallback 接口确保消息成功到达交换机并路由到队列。importorg.springframework.amqp.rabbit.core.RabbitTemplate;importorg.springframework.amqp.support.CorrelationData;importorg.springframework.stereotype.Component;importjavax.annotation.PostConstruct;importjavax.annotation.Resource;ComponentpublicclassReliableProducer{ResourceprivateRabbitTemplaterabbitTemplate;PostConstructpublicvoidinit(){// 设置确认回调rabbitTemplate.setConfirmCallback((correlation,ack,cause)-{if(ack){System.out.println(消息成功送达Broker: correlation);}else{System.err.println(消息送达Broker失败原因: cause);// 执行重试或记录日志}});// 设置回退回调仅当消息无法路由到队列时触发rabbitTemplate.setReturnsCallback(returned-{System.err.println(消息路由失败退回消息: returned.getMessage());// 执行补偿逻辑如存入数据库或死信队列});}publicvoidsendMessage(Stringexchange,StringroutingKey,Objectmessage){rabbitTemplate.convertAndSend(exchange,routingKey,message);}}三、消费者端手动ACK与异常处理在监听器中通过 Channel 手动发送ACK或NACK确保业务逻辑执行成功后才确认消息importcom.rabbitmq.client.Channel;importorg.springframework.amqp.core.Message;importorg.springframework.amqp.rabbit.annotation.RabbitListener;importorg.springframework.stereotype.Component;importjava.io.IOException;ComponentpublicclassReliableConsumer{RabbitListener(queuesmy_queue)publicvoidhandleMessage(Messagemessage,Channelchannel)throwsIOException{longdeliveryTagmessage.getMessageProperties().getDeliveryTag();try{// 1. 执行业务逻辑System.out.println(收到消息: newString(message.getBody()));// 模拟业务处理...// 2. 业务成功手动ACKchannel.basicAck(deliveryTag,false);}catch(Exceptione){// 3. 业务失败手动NACK并重新入队requeuetrue// 注意若一直失败会导致死循环建议配合重试次数或转入死信队列channel.basicNack(deliveryTag,false,true);System.err.println(消息处理失败重新入队: e.getMessage());}}}四、Broker端队列与消息持久化配置在创建队列和发送消息时必须显式声明持久化属性。importorg.springframework.amqp.core.*;importorg.springframework.context.annotation.Bean;importorg.springframework.context.annotation.Configuration;ConfigurationpublicclassRabbitConfig{// 1. 定义持久化交换机BeanpublicDirectExchangedirectExchange(){returnnewDirectExchange(my_exchange,true,false);}// 2. 定义持久化队列BeanpublicQueuequeue(){returnnewQueue(my_queue,true);// durabletrue}// 3. 绑定关系BeanpublicBindingbinding(DirectExchangeexchange,Queuequeue){returnBindingBuilder.bind(queue).to(exchange).with(my_routing_key);}// 4. 发送消息时设置持久化模式 (Spring Boot 默认即为 PERSISTENT)// 若需自定义可在 convertAndSend 时传入 MessagePostProcessor}五、关键注意事项性能权衡‌开启生产者确认和持久化会略微降低吞吐量但在金融、订单等核心场景中是必须的。死信队列‌对于多次重试仍失败的消息应配置 TTL 和死信交换机DLX避免阻塞正常业务。幂等性‌由于网络抖动可能导致消息重复投递消费者端必须结合之前讨论的‌幂等性设计‌如Redis去重或数据库唯一索引来处理重复消息。

相关新闻

嵌入式DMA开发实战:EDMA3中断、队列与优先级机制深度解析

嵌入式DMA开发实战:EDMA3中断、队列与优先级机制深度解析

1. 项目概述与核心价值 在嵌入式系统,尤其是高性能处理器(如TI的C6000系列DSP)的开发中,数据搬移的效率直接决定了整个系统的性能天花板。当你在处理音频流、视频帧或者雷达回波数据时,如果让CPU亲自去搬运每一个字节&…

2026/7/22 16:03:24 阅读更多 →
EDMA3高级DMA技术:Ping-Pong缓冲与传输链原理及McBSP音频实战

EDMA3高级DMA技术:Ping-Pong缓冲与传输链原理及McBSP音频实战

1. 项目概述与核心价值 在嵌入式系统开发,尤其是涉及高速数据流处理的应用中,CPU的资源是极其宝贵的。无论是音频编解码、图像传感器数据采集,还是高速通信接口的数据搬移,如果让CPU亲自去处理每一个字节的传输,其计算…

2026/7/24 5:51:33 阅读更多 →
图论:BFS与DFS,拓扑排序,前缀树Trie

图论:BFS与DFS,拓扑排序,前缀树Trie

深度优先搜索depth-first search,dfs 1、定义 这是一种用于遍历或搜索树/图的算法。简单来说,从起始节点开始,沿着路径尽可能深/远地搜索,直到到达叶子节点,然后回溯到上一个节点,继续探索未访问的路径。 2、方法 …

2026/7/23 21:52:41 阅读更多 →

最新新闻

基于YOLOv11的施工现场安全智能监控系统设计与实现

基于YOLOv11的施工现场安全智能监控系统设计与实现

1. 项目背景与核心价值施工现场安全管理一直是建筑行业的痛点。传统人工巡检存在盲区大、响应滞后等问题,而基于计算机视觉的智能监控系统正成为行业新趋势。YOLOv11作为YOLO系列的最新迭代版本,在检测精度和推理速度上都有显著提升,特别适合…

2026/7/24 5:51:55 阅读更多 →
半监督学习在网络入侵检测系统中的应用实践

半监督学习在网络入侵检测系统中的应用实践

1. 项目概述网络入侵检测系统(IDS)作为网络安全防御的重要组成部分,面临着检测未知攻击的严峻挑战。传统基于监督学习的入侵检测方法需要大量标记数据,而实际场景中获取高质量标记数据成本高昂且数量有限。半监督学习技术能够利用…

2026/7/24 5:51:55 阅读更多 →
MSP430G2x53-Q1的ADC与I/O复用:低功耗数据采集系统设计指南

MSP430G2x53-Q1的ADC与I/O复用:低功耗数据采集系统设计指南

1. 项目概述:深入MSP430G2x53-Q1的模拟与数字世界在嵌入式系统,尤其是汽车电子和便携式设备的设计中,如何精准、高效地捕获现实世界的模拟信号,同时灵活地控制数字外设,是每个工程师必须面对的挑战。德州仪器&#xff…

2026/7/24 5:51:55 阅读更多 →
优秀项目经理的22件大事与4项核心能力:贯穿施工全流程的管理之道

优秀项目经理的22件大事与4项核心能力:贯穿施工全流程的管理之道

项目经理的角色与核心职责项目经理是整个工程项目的负责人,对工程的质量、安全、进度、成本等方面负主要责任。这就要求项目经理对项目进行全过程控制,保证项目正常施工、正常运转,施工中要节约成本,创造最大经济效益。要管好一个…

2026/7/24 5:51:55 阅读更多 →
项目管理计划到底要解决什么问题?

项目管理计划到底要解决什么问题?

一、引言:为什么需要项目管理计划?很多项目经理在启动项目时,会直接陷入“怎么做”的细节,却忽略了“为什么做”和“做成什么样”的根本问题。项目管理计划(Project Management Plan)正是为了解决这个核心痛…

2026/7/24 5:51:55 阅读更多 →
OpenClaw模型路由系统与LiteLLM适配器技术解析

OpenClaw模型路由系统与LiteLLM适配器技术解析

1. OpenClaw模型路由系统概述OpenClaw作为新一代AI模型调度平台,其核心价值在于实现了异构AI模型的统一接入与智能调度。这个系统最吸引我的地方是它通过LiteLLM适配层,将GPT-4、Llama3、Claude等不同架构的模型抽象为标准化接口,开发者不再需…

2026/7/24 5:50:55 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻