RabbitMQ的介绍
RabbitMQ的介绍
RabbitMQ的安装
-
使用Docker进行安装
-
docker pull rabbitmq:3-managementrabbitmq:3-management镜像预装了 RabbitMQ 的管理插件(rabbitmq_management)。- 管理插件提供了一个基于 Web 的管理界面,用户可以通过浏览器访问该界面,监控和管理 RabbitMQ。
- 如果使用
rabbitmq:3镜像(不带management标签),则不会预装 RabbitMQ 管理插件。 - 将无法通过 Web 界面管理 RabbitMQ,只能通过命令行或客户端工具进行操作。
-
手动安装管理插件
-
如果使用
rabbitmq:3镜像,但仍然需要管理插件,可以手动安装: -
进入容器:
-
docker exec -it <容器ID> bash
-
-
启用管理插件:
-
rabbitmq-plugins enable rabbitmq_management
-
-
重启容器:
-
docker restart <容器ID>
-
-
-
-
启动RabbitMQ
-
docker run -d --hostname my-rabbit --name rabbitMQ -p 5672:5672 -p 15672:15672 rabbitmq:3-management-d- 含义:以“分离模式”(detached mode)运行容器。
- 作用:容器会在后台运行,不会占用当前终端。
--hostname my-rabbit- 含义:设置容器的主机名(hostname)。
- 作用:RabbitMQ 使用主机名来标识节点。这里将容器的主机名设置为
my-rabbit。 - 用于设置容器内部的主机名,影响容器内部的操作系统和应用程序。
--name some-rabbit- 含义:为容器指定一个名称。
- 作用:方便后续通过名称管理容器(如启动、停止、删除等)。
-p 5672:5672- 含义:将宿主机的端口映射到容器的端口。
- 作用:
5672是 RabbitMQ 的默认 AMQP(Advanced Message Queuing Protocol)端口,用于客户端与 RabbitMQ 通信。- 这里将宿主机的
5672端口映射到容器的5672端口。
-p 15672:15672- 含义:将宿主机的端口映射到容器的端口。
- 作用:
15672是 RabbitMQ 管理插件的默认端口,用于访问 RabbitMQ 的 Web 管理界面。- 这里将宿主机的
15672端口映射到容器的15672端口。
rabbitmq:3-management- 含义:指定要运行的 Docker 镜像。
- 作用:
rabbitmq是 RabbitMQ 的官方 Docker 镜像。3-management是镜像的标签(tag),表示包含 RabbitMQ 管理插件的版本。
-
-
访问管理界面
- 打开浏览器,访问
http://localhost:15672。 - 使用默认用户名和密码
guest/guest登录。
- 打开浏览器,访问
RabbitMQ虚拟主机
虚拟主机的定义和作用
- 定义
- 虚拟主机是 RabbitMQ 中的逻辑隔离单元。
- 它允许在同一个 RabbitMQ 服务器上创建多个独立的环境,每个环境拥有自己的资源(如交换器、队列、绑定等)。
- 虚拟主机之间完全隔离,资源不能共享。
- 作用
- 资源隔离:
- 不同虚拟主机之间的资源(如交换器、队列)完全隔离。
- 例如,虚拟主机
vhost1中的队列my_queue和虚拟主机vhost2中的队列my_queue是两个不同的队列。
- 权限控制:
- 可以为每个虚拟主机设置独立的用户权限。
- 例如,用户
user1只能访问虚拟主机vhost1,而不能访问虚拟主机vhost2。
- 多租户支持:
- 虚拟主机可以用于支持多租户架构,每个租户使用独立的虚拟主机。
- 环境隔离:
- 在开发、测试和生产环境中,可以使用不同的虚拟主机来隔离资源,避免相互影响。
- 资源隔离:
虚拟主机的管理
-
RabbitMQ 默认有一个虚拟主机,名称为
/。 -
如果没有显式创建虚拟主机,所有资源都会存储在默认虚拟主机中。
-
创建虚拟主机
-
可以使用 RabbitMQ 的命令行工具
rabbitmqctl创建虚拟主机: -
rabbitmqctl add_vhost <vhost_name>
-
-
删除虚拟主机
-
可以使用以下命令删除虚拟主机:
-
rabbitmqctl delete_vhost <vhost_name>
-
-
列出虚拟主机
-
rabbitmqctl list_vhosts
-
RabbitMQ消息发送流程
核心组件
在 RabbitMQ 中,消息发送流程涉及以下核心组件:
- 生产者(Producer):
- 发送消息的应用程序。
- 将消息发布到交换器(Exchange)。
- 交换器(Exchange):
- 接收生产者发送的消息。
- 根据路由规则将消息分发到队列。
- 队列(Queue):
- 存储消息的缓冲区。
- 消费者从队列中获取消息。
- 消费者(Consumer):
- 接收并处理消息的应用程序。
- 从队列中订阅消息。
- 绑定(Binding):
- 连接交换器和队列的规则。
- 定义了交换器如何将消息路由到队列。
消息发送流程
-
生产者发送消息
-
生产者创建一条消息,包含消息体和可选的属性(如路由键、优先级等)。
-
生产者将消息发送到指定的交换器(Exchange)。
-
发送时需要指定交换器名称和路由键(Routing Key)。
-
-
交换器接收消息
-
交换器接收生产者发送的消息。
-
根据交换器类型和绑定规则,决定将消息路由到哪些队列。
- 交换器类型:
- Direct Exchange:根据路由键精确匹配。
- Topic Exchange:根据路由键的模式匹配。
- Fanout Exchange:广播到所有绑定的队列。
- Headers Exchange:根据消息头属性匹配。
- 交换器类型:
-
-
消息路由到队列
- 交换器根据绑定规则将消息路由到一个或多个队列。
- 如果消息没有匹配任何绑定规则,可能会被丢弃或返回给生产者(取决于配置)。
-
队列存储消息
- 队列接收交换器路由过来的消息。
- 消息在队列中等待消费者处理。
- 如果队列已满(达到最大长度),可能会拒绝新消息(取决于配置)。
-
消费者订阅消息
- 消费者订阅一个或多个队列。
- 消费者从队列中获取消息。
- 可以通过 拉取模式(主动从队列获取)或 推送模式(RabbitMQ 主动推送)获取消息。
-
消费者处理消息
- 消费者接收到消息后进行处理。
- 处理完成后,消费者向 RabbitMQ 发送确认(ACK)。
- 如果消费者处理失败,可以拒绝消息(NACK)或将消息重新放回队列。
-
消息确认
- RabbitMQ 收到消费者的确认后,将消息从队列中删除。
- 如果启用了持久化,消息会从磁盘中删除。

浙公网安备 33010602011771号