RabbitMQ的整体架构如下图所示:
Broker
:Broker中按虚拟主机(virtual host
)划分,每个虚拟主机下面有自己的交换机(exchange
)和消息队列(queue
),以及交换机和队列的绑定routing_key
(有些人会把这个key称为binding_key
);
生产端
:一般地,同一个客户端(client
)里面的每个生产者(producer
)创建一个专门的通道(channel
),复用同一个TCP连接(connection
),每个生产者可以往Broker发布消息,发布消息的时候,需指定虚拟主机,以及虚拟主机上的交换机,并且消息需要带上routing_key;
消费端
:一般地,同一个客户端(client
)里面的每个消费者(consumer
)创建一个专门的通道(channel
),复用同一个TCP连接,每个消费者指定一个消息队列进行消费。同一个消息队列,可以有多个消费者共同消费,但消息队列里面的同一条消息,只会由一个消费者消费,多个消费者相当于给消息队列做了负载均衡。
针对默认交换机
、直连交换机
和主题交换机
,生产端带入的routing_key
和交换机与队列之间绑定的routing_key(binding_key)
进行匹配,匹配上了,就把消息投递给对应的消息队列。
针对扇形交换机,直接把消息投递给所有与扇形交换机绑定的队列。
rabbitmqctl
是管理RabbitMQ服务器节点的主要命令行工具,相关完成命令介绍参考:rabbitmqctl(8)[1]