RabbitMQ 中的核心概念

466 阅读2分钟

整体架构

核心概念

  • 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,消息队列,保存消息的地方

消息流转

  1. 消息发送端指定路由键和交换机并发送消息Broker 中,消息最先会经过 Virtual host
  2. 当消息到达 Exchange 时,交换机会根据路由键转发消息到绑定队列上
  3. 消息到达队列后,被监听队列的消费端消费

整个流程中,消息发送端只接触Exchange, 消息消费端只监听Queue。消息发送端和消息消费端相互隔离,实现解耦!

通信方式

RabbitMQ 会为每个 Connection 创建一个 TCP 链接,由于 TCP 连接的创建和销毁开销较大,且并发数受系统资源限制,会造成性能瓶颈。RabbitMQ 使用 Channel 的方式来传输数据。Channel 是建立在真实的 TCP 连接内的虚拟连接,且每条TCP连接上的信道数量没有限制,一个 Channel 代表一个会话,几乎所有的操作都在 Channel 中进行,一个 Connection 可以有多个 Channel