RabbitMQ基本结构

144 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。

AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、 安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。

生产者(Producer

消息生产者,即生产方客户端,生产方客户端将消息发送

消费者(Consumer

消息消费者,即消费方客户端,接收MQ转发的消息。

连接(Connetion

客户端与RabbitMQ进行交互,首先就需要建立一个TPC连接,这个连接就是Connection

信道(Channel

一旦客户端与RabbitMQ建立了连接,就会分配一个AMQP信道 Channel

每个信道都会被分配一个唯一的ID。也可以理解为是客户端与RabbitMQ实际进行数据交互的通道,后续的大多数的数据操作都是在信道 Channel 这个层面展开的。

RabbitMQ为了减少性能开销,也会在一个Connection中建立多个Channel,这样便于客户端进行多线程连接,这些连接会复用同一个ConnectionTCP通道,所以在实际业务中,对于ConnectionChannel的分配也需要根据实际情况进行考量。

虚拟主机(Virtual Host

RabbitMQ出于服务器复用的想法,可以在一个RabbitMQ集群中划分出多个虚拟主机,每一个虚拟主机都有AMQP的全套基础组件,并且可以针对每个虚拟主机进行权限以及数据分配,并且不同虚拟主机之间是完全隔离的。

交换机(Exchange

这是RabbitMQ中进行数据路由的重要组件。消息发送到RabbitMQ中后,会首先进入一个交换机,然后由交换机负责将数据转发到不同的队列中。RabbitMQ中有多种不同类型的交换机来支持不同的路由策略。在每个虚拟主机中,RabbitMQ都会默认创建几个不同类型的交换机来。

交换机多用来与生产者打交道。生产者发送的消息通过Exchange交换机分配到各个不同的Queue队列上,而对于消息消费者来说,通常只需要关注自己感兴趣的队列就可以了。

队列(Queue

队列是实际保存数据的最小单位。队列结构天生就具有先进先出(FIFO)的顺序,消息最终都会被分发到不同的队列当中,然后才被消费者进行消费处理。这也是最近RabbitMQ功能变动最大的地方。

最为常用的是经典队列Classic3.8.X版本添加了Quorum队列,3.9.X又添加了Stream队列。