此文介绍了RabbitMQ工作模型

本文会随着作者日常学习进行补充及内容修正


1.什么是RabbitMQ

​ MQ是Message Queue,也就是消息队列,是一个消息中间件,使用Erlang语言写的。


2.工作模型

RabbitMQ的工作模型

(1)Broker:中介。提供一种传输服务,维护一条从生产者到消费者的传输线路,保证消息数据能按照指定的方式传输。

(2)Exchange:消息交换机。指定消息按照什么规则路由到哪个队列Queue。生产者不能直接和Queue建立连接,而是通过交换机进行消息分发。

(3)Queue:消息队列。消息的载体,每条消息都会被投送到一个或多个队列中。

(4)Binding:绑定。作用就是将Exchange和Queue按照某种路由规则绑定起来。

(5)RoutingKey:路由关键字。消息所携带的标志,Exchange根据RoutingKey进行消息投递。

(6)VHost:虚拟主机。一个Broker可以有多个虚拟主机,用作不同用户的权限分离。一个虚拟主机持有一组Exchange、Queue和Binding。

(7)Producer:消息生产者。主要将消息投递到对应的Exchange上面。一般是独立的程序。

(8)Consumer:消息消费者。消息的接收者,一般是独立的程序。

(9)Channel:消息通道,也称信道,是连接消费者和Broker的虚拟连接,如果直接让消费者和Broker建立TCP的连接,会让Broker有性能损耗。在客户端的每个连接里可以建立多个Channel,每个Channel代表一个会话任务。


3.工作流程

  1. 生产者通过消息通道(channel)与RabbitMQ建立连接
  2. 消息传送到交换机(Exchange),并且消息上有对应的标志关键字(RoutingKey)
  3. 交换机Exchange接收到消息后,就根据消息的RoutingKey和已经设置的binding,进行消息路由(投递),将消息投递到一个或多个队列(Queue)里
  4. 消费者(Consumer)客户端从对应的队列中获取并处理消息

4.Exchange类型

  • Direct
    全匹配式传递。当RoutingKey和消息标志完全一样才会存放到对应的队列

  • Topic
    广播式全部传递。息都会被投递到所有与此Exchange绑定的queue中

  • Fanout
    匹配式传递

    ​ #表示0个或多个单词

    ​ *表示1个