上一篇文章讲了消息队列的削峰填谷与系统解耦。这篇深入 RabbitMQ 最核心的概念——交换机(Exchange)与路由策略。

RabbitMQ 核心架构

消息流转路径:Producer → Exchange → Queue → Consumer。交换机不存储消息,它只负责根据路由规则把消息分发到对应队列。队列才是存储消息的地方。

四种交换机详解

类型 路由方式 典型场景
Direct routing key 精确匹配 订单通知指定服务
Topic 通配符模式匹配(* 一层,# 多层) 事件驱动分发
Fanout 广播到所有绑定队列 缓存失效广播
Headers 基于消息 headers 匹配 复杂条件过滤

Direct 是最基础也是使用最多的类型——简单、精确、高效。Topic 提供了最大的灵活性,适合事件驱动架构。Fanout 适合一对多广播场景。Headers 适用面较窄。

死信队列(DLX)

死信出现的三种情况:消息被消费者拒绝且 requeue=false、消息存活超过 TTL、队列超过最大长度。死信队列就是被指定接收这些死信的普通队列——用于统一处理和人工排查异常消息。

延迟队列

RabbitMQ 没有内置延迟队列,但通过 TTL + DLX 组合实现。消息先发送到一个带超时的队列,过期后自动转发到真正的消费队列。典型应用:订单 30 分钟未支付自动取消。

ACK 与消息可靠性

消费者处理完消息后必须发送 ACK 确认,RabbitMQ 才会从队列中删除该消息。如果消费者崩溃未发送 ACK,消息会重新投递给其他消费者。配合持久化队列和持久化消息,可以实现消息零丢失。

总结

Direct 做精确分发、Topic 做模式匹配、Fanout 做广播——三种交换机覆盖了绝大多数场景。加上死信队列处理异常、TTL+DLX 实现延迟、ACK 保障可靠性——这些就是生产级消息系统的标准配置。