文章目录
- [1. Producer / Consumer](#1. Producer / Consumer)
- [2. Connection / Channel](#2. Connection / Channel)
- [3. Virtual host](#3. Virtual host)
- [4. Queue](#4. Queue)
- [5. Exchange](#5. Exchange)
- [6. 工作流程](#6. 工作流程)
- [7. AMQP](#7. AMQP)
- [8. web 界面操作](#8. web 界面操作)
-
- [8.1 添加用户](#8.1 添加用户)
- [8.2 用户相关操作](#8.2 用户相关操作)
- [8.3 创建虚拟主机](#8.3 创建虚拟主机)
在安装完 RabbitMQ 之后,我们接下来学习如何去使用 RabbitMQ
在上一个篇幅,我们讲了 RabbitMQ 的安装,并安装了管理界面

界面上的导航栏共分 6 部分,这 6 部分分别是什么意思呢,我们先看看 RabbitMQ 的工作流程

RabbitMQ 是一个消息中间件,也是一个生产者消费者模型,它负责接收、存储并转发消息。
消息传递的过程类似邮局:当你要发送一个邮件时,你把你的邮件放到邮局,邮局接收邮件,并通过邮递员送到收件人的手上。

按照这个逻辑,Producer 就类似邮件发件人,Consumer 就是收件人,RabbitMQ 就类似于邮局。
1. Producer / Consumer
它们各自的区别如下:
- Producer:生产者,是 RabbitMQ Server 的客户端,负责向 RabbitMQ 发送消息。
- Consumer:消费者,也是 RabbitMQ Server 的客户端,从 RabbitMQ 接收消息。
- Broker:其实就是 RabbitMQ Server,主要是接收和收发消息。
生产者(Producer)创建消息,然后发布到 RabbitMQ 中。在实际应用中,消息通常是一个带有一定业务逻辑结构的数据。比如 json 字符串。消息可以带有一定的标签,RabbitMQ 会根据标签进行路由,把消息发送给感兴趣的消费者(Consumer)。
消费者连接到 RabbitMQ 服务器,就可以消费消息了,消费的过程中,标签会被丢掉。消费者只会收到消息,并不知道消息的生产者是谁, 当然消费者也不需要知道。
对于 RabbitMQ 来说,一个 RabbitMQ Broker 可以简单地看作是一个 RabbitMQ 服务节点,或者 RabbitMQ 服务实例。大多数情况下也可以将一个 RabbitMQ Broker 看作一台 RabbitMQ 服务器。

2. Connection / Channel
Connection:连接。是客户端和 RabbitMQ 服务器之间的一个 TCP 连接。这个连接是建立消息传递的基础,它负责传输客户端和服务器之间的所有数据和控制信息。
Channel:通道,信道。Channel 是在 Connection 之上的一个抽象层。在 RabbitMQ 中,一个 TCP 连接可以有多个 Channel,每个 Channel 都是独立的虚拟连接。消息的发送和接收都是基于 Channel 的。
通道的主要作用是:将消息的读写操作复用到同一个 TCP 连接上,这样可以减少建立和关闭连接的开销,提高性能。

3. Virtual host
Virtual host:虚拟主机。这是一个虚拟概念。它为消息队列提供了一种逻辑上的隔离机制。对于 RabbitMQ 而言,一个 Broker Server 上可以存在多个 Virtual Host。当多个不同的用户使用同一个 RabbitMQ Server 提供的服务时,可以虚拟划分出多个 vhost,每个用户在自己的 vhost 创建 exchange/queue 等。
它就类似MySQL的 "database",是一个逻辑上的集合。一个 MySQL 服务器可以有多个 database。
4. Queue
Queue:队列,是 RabbitMQ的内部对象,用于存储消息。

多个消费者可以订阅同一个队列。

5. Exchange
Exchange:交换机。message 到达 broker 的第一站,它负责接收生产者发送的消息,并根据特定的规则把这些消息路由到一个或多个 Queue 队列中。
Exchange 起到了消息路由的作用,它根据类型和规则来确定如何转发接收到的消息。
类似于发完快递之后,物流公司怎么处理呢,根据咱们的地址来分派这个快递到不同的站点,然后再送到收件人手里。这个分配的工作,就是交换机来做的。
如下所示:

6. 工作流程
理解了上面的概念之后,再来回顾一下这个图,来看 RabbitMQ 的工作流程:

具体流程如下:
- 1、Producer 生产了一条消息
- 2、Producer 连接到 RabbitMQ Broker,建立一个连接(Connection),开启一个信道(Channel)
- 3、Producer 声明一个交换机(Exchange),路由消息
- 4、Producer 声明一个队列(Queue),存放信息
- 5、Producer 发送消息至 RabbitMQ Broker
- 6、RabbitMQ Broker 接收消息,并存入相应的队列(Queue)中,如果未找到相应的队列,则根据生产者的配置,选择丢弃或者退回给生产者。
如果我们把 RabbitMQ 比作一个物流公司,那么它的一些核心概念可以这样理解:
- 1、Broker 就类似整个物流公司的总部,它负责协调和管理所有的物流站点,确保包裹安全、高效地送达。
- 2、Virtual Host 可以看作是物流公司为不同的客户或业务部门划分的独立运营中心。每个运营中心都有自己的仓库(Queue)、分拣规则(Exchange)和运输路线(Connection 和 Channel),这样可以确保不同客户的包裹处理不会相互干扰,同时提供定制化的服务。
- 3、Exchange 就像是站点里的分拣中心。当包裹到达时,分拣中心会根据包裹上的标签来决定这个包裹应该送往哪个目的地(队列)。快递站点可能有不同类型的分拣中心,有的按照具体地址分拣,有的将包裹复制给多个收件人等。
- 4、Queue 就是快递站点里的一个个仓库,用来临时存放等待派送的包裹。每个仓库都有一个或多个快递员(消费者)负责从仓库中取出包裹并派送给最终的收件人。
- 5、Connection 就像是快递员与快递站点之间的通信线路。快递员需要通过这个线路来接收派送任务(消息)。
- 6、Channel 就像是快递员在执行任务时使用的多个并行的通信线路。这样,快递员可以同时处理多个包裹,比如一边派送包裹,一边接收新的包裹。
7. AMQP
AMQP(Advanced Message Queuing Protocol)是一种高级消息队列协议,AMQP 定义了一套确定的消息交换功能,包括交换器(Exchange)、队列(Queue)等。这些组件共同工作,使得生产者能够将消息发送到交换器,然后由队列接收并等待消费者接收。AMQP 还定义了一个网络协议,允许客户端应用通过该协议与消息代理和 AMQP模型进行交互通信。
RabbitMQ 是遵从 AMQP 协议的,换句话说,RabbitMQ 就是 AMQP 协议的 Erlang 的实现(当然 RabbitMQ 还支持 STOMP2、MQTT2 等协议)。AMQP的模型结构和 RabbitMQ 的模型结构是一样的。

8. web 界面操作
RabbitMQ 管理界面上的 Connections、Channels、Exchange、Queues 就是和上面流程图的概念是一样的,Overview 就是视图的意思,Admin 是用户管理。
我们在操作 RabbitMQ 前,需要先创建 Virtual host。
接下来看具体操作。
8.1 添加用户
点击【Admin】-【Add a user】

然后设置账号密码及权限,添加完成后,点击【Add user】

然后观察用户是否添加成功

8.2 用户相关操作
点击用户,查看详情

可以在用户详情页面,进行更新或删除操作。
比如:设置对虚拟机的操作权限

或者:更新 / 删除用户

或者:退出当前用户

8.3 创建虚拟主机
在【Admin】标签页下,点击右侧【Virtual Hosts】-【Add a new virtual host】

创建好以后,观察创建结果

此操作会为当前登录用户设置虚拟主机。