整体架构
核心概念
- Server: 又称Broker, 接受客户端的连接,实现AMQP实体服务,这里指RabbitMQ 服务实例
- Connection: 连接,应用程序与Broker的网络连接。
- Channel: 网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel:,每个Channel代表一个会话任务。
- Message:消息,由 Properties 和 Body 组成。Properties 可以对消息进行修饰,比如消息的优先级、延迟等,而Body 则就是消息的内容(properties 中我们可以设置消息过期时间以及是否持久化等,也可以传入自定义的map属性,这些在消费端也都可以获取到)
- Virtual host: 虚似主机,用于进行逻辑隔离,是最上层的消息路由。一个 Virtual Host 里面可以有若干个 Exchange和 Queue ,同一个 VirtualHost 里面不能有相同名称的 Exchange 或 Queue。权限控制的最小粒度是Virtual Host。
- Exchange: 交换机,接受消息,根据路由键转发消息到绑定队列上
- Binding: Exchange 和 Queue 之间的虚拟连接,binding 中包含 routing key。
- Routing key: 一个路由规则,虚拟机可用它来确定如何路由一个特定消息,即交换机绑定到 Queue 的键。
- Queue: 也称为Message Queue,消息队列,保存消息的地方
消息流转
- 消息发送端指定路由键和交换机并发送消息到 Broker 中,消息最先会经过 Virtual host
- 当消息到达 Exchange 时,交换机会根据路由键转发消息到绑定队列上
- 消息到达队列后,被监听队列的消费端消费
整个流程中,消息发送端只接触Exchange, 消息消费端只监听Queue。消息发送端和消息消费端相互隔离,实现解耦!
通信方式
RabbitMQ 会为每个 Connection 创建一个 TCP 链接,由于 TCP 连接的创建和销毁开销较大,且并发数受系统资源限制,会造成性能瓶颈。RabbitMQ 使用 Channel 的方式来传输数据。Channel 是建立在真实的 TCP 连接内的虚拟连接,且每条TCP连接上的信道数量没有限制,一个 Channel 代表一个会话,几乎所有的操作都在 Channel 中进行,一个 Connection 可以有多个 Channel