Skip to content

概念卡片:RabbitMQ 架构与核心组件

一句话机制:RabbitMQ 的架构核心是「Producer 发消息给 Exchange,Exchange 按 RoutingKey 路由到 Queue,Consumer 从 Queue 消费」;围绕这条链路有六个核心概念——Broker、Exchange、Queue、Channel、Binding、Virtual Host。

六大核心组件

组件作用
BrokerRabbitMQ 服务端,管理所有 Exchange 和 Queue
Exchange交换机,接收消息并按 RoutingKey 路由(fanout/direct/topic 等)
Queue队列,FIFO 存储消息
Channel建立在 TCP 连接上的虚拟连接,每条 AMQP 指令都走它
Binding交换机与队列的关联(多对多,绑定键 BindingKey)
Virtual Hostvhost,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 并发收发。

关联

最近更新