RabbitMQ 核心原理
理解 RabbitMQ 之前,最好先熟悉一下 Java 的观察者模式,这样消息中间件的概念会清晰很多。
核心概念
- Message(消息):由消息头和消息体组成。消息头包含 routing-key、priority、delivery-mode 等属性;消息体对系统而言是不透明的。
- Publisher(生产者):向交换器发布消息的客户端应用。
- Consumer(消费者):从队列获取消息的客户端应用。
- Exchange(交换器):接收生产者消息并路由到队列。常见类型有 direct(精确匹配)、fanout(广播)、topic(主题规则匹配)。
- Binding(绑定):连接交换器和队列的路由规则,基于路由键。
- Queue(队列):存储消息的容器,直到被消费者取走。
- Routing-key(路由键):决定消息投递到哪个队列的规则。
- Connection(连接):客户端与 RabbitMQ 服务器建立的 TCP 连接。
- Channel(信道):TCP 上的虚拟连接。一条 TCP 连接可建立多条信道,所有发布、订阅操作均通过信道完成。
- Virtual Host(虚拟主机):独立的逻辑域,拥有自己的队列、交换器和权限机制,默认是
/。 - Broker(代理):消息队列服务器实体。
交换器与队列的关系
消息首先到达交换器,随后根据路由键与绑定的队列进行匹配。如果匹配成功,消息进入对应队列;否则可能被丢弃。
为什么需要信道?
直接使用 TCP 通信存在明显瓶颈:
- 开销大:TCP 建立需三次握手,断开需四次挥手,频繁创建销毁消耗巨大。
- 资源限制:操作系统处理 TCP 连接数有限,高并发下容易成为瓶颈。
- 复用优势:信道实现了多路复用。一条 TCP 连接上可容纳多条信道,即使每秒成千上万请求也不会阻塞,显著提升了性能。


