RabbitMQ 消息可靠性保障
消息可靠性保障:三道防线全覆盖 📖 前置阅读:本文假设读者已掌握 SpringBoot RabbitMQ 的基本操作(RabbitTemplate 发送、@RabbitListener 消费、手动 ACK)。如果还不熟悉,建议先阅读 SpringBoot RabbitMQ 全操作指南。 一、⚡ 问题切入:消息去哪儿了? 先看一段日常的订单处理代码: // 下单成功后发消息 @Service public class OrderService { @Transactional public void createOrder(OrderRequest req) { orderMapper.insert(req.toOrder()); // 1. 写 MySQL rabbitTemplate.convertAndSend( // 2. 发消息 "order.exchange", "order.created", req); } } 表面看起来没问题。但消息真的被消费了吗?在以下任何一个环节都可能丢: Producer → [网络] → RabbitMQ → [网络] → Consumer ① 发送丢失 ② Broker 宕机丢失 ③ 消费失败丢失 环节 丢失原因 后果 ① 生产者 → Broker 网络断连、Exchange 不存在、消息路由失败 消息根本没进队列 ② Broker 存储 RabbitMQ 进程崩溃、服务器断电 内存中的消息全部丢失 ③ Consumer 消费 消费者处理到一半挂了、代码异常没 ACK 消息被取走但实际没处理完 这三个环节必须逐一设防——RabbitMQ 提供了完整的机制,但需要生产者、Broker、消费者三端配合。 ...