主题
概念卡片:RabbitMQ 架构与核心组件
一句话机制:RabbitMQ 的架构核心是「Producer 发消息给 Exchange,Exchange 按 RoutingKey 路由到 Queue,Consumer 从 Queue 消费」;围绕这条链路有六个核心概念——Broker、Exchange、Queue、Channel、Binding、Virtual Host。
六大核心组件
| 组件 | 作用 |
|---|---|
| Broker | RabbitMQ 服务端,管理所有 Exchange 和 Queue |
| Exchange | 交换机,接收消息并按 RoutingKey 路由(fanout/direct/topic 等) |
| Queue | 队列,FIFO 存储消息 |
| Channel | 建立在 TCP 连接上的虚拟连接,每条 AMQP 指令都走它 |
| Binding | 交换机与队列的关联(多对多,绑定键 BindingKey) |
| Virtual Host | vhost,mini 版 RabbitMQ,隔离不同应用 |
关键关系
Connection(TCP 连接)
└── Channel × N(虚拟连接,唯一 ID,复用 TCP)
└── 发布/消费 AMQP 指令
Exchange ←─Binding(绑定键)─→ Queue(多对多,像两张表的外键关联)三种交换机类型
| 类型 | 路由规则 |
|---|---|
| fanout | 广播,发给所有绑定的队列 |
| direct | 按 RoutingKey 精确匹配 |
| topic | 按 RoutingKey 通配符匹配(* 一段、# 多段) |
不变量(必须成立的约束)
- Exchange 只路由不存储,Queue 才存储——消息最终存在 Queue 里。
- Channel 复用 TCP 连接,避免每条消息都建 TCP 连接(昂贵)。
- vhost 是隔离边界:一个 RabbitMQ 实例可用多个 vhost 服务不同应用,各自有独立的 Exchange/Queue/权限。
踩坑案例
- 现象:消息发出去了但消费者收不到。 原因:Exchange 与 Queue 没有 Binding,或 RoutingKey 不匹配。解决:核对绑定关系和交换机类型(direct 需精确匹配 RoutingKey)。
常见误解
- 以为 Exchange 会存消息 → Exchange 只负责路由,Queue 才是存储容器。
- 以为一个 TCP 连接只能发一条消息 → 连接上可开多个 Channel 并发收发。
关联
- 总览:消息队列技术栈总览
- 工作模式:概念卡片:RabbitMQ工作模式
- 源:
B40-资源/语雀-Leo的知识库/微服务/03_RabbitMQ/_1_消息中间件概述(3 篇)