一、 RabbitMQ的认识与安装部署
底层语言:RabbitMQ 是基于面向并发的 Erlang 语言编写的,天生具备极强的并发处理能力和极低的响应延迟。
Docker部署与端口说明:课程中采用 Docker 进行快速安装部署。在部署时,主要会映射两个核心端口:
15672端口:提供图形化的管理控制台(UI界面)访问。通过浏览器访问该端口并输入配置的账号密码,即可进入管理后台。5672端口:用于实际的消息通信(收发消息)端口。
控制台基础面板:在管理控制台中,主要包含 Overview(总览)、Connections(连接)、Channels(通道)、Exchanges(交换机)和 Queues(队列)等模块。
二、 核心概念与消息模型
在 RabbitMQ 中,消息并不是由生产者直接丢进队列的,而是有着一套完整的路由与转发模型:
Connections(连接)与 Channels(通道):生产者或消费者要与 MQ 进行交互,首先需要建立连接(Connection)。在连接建立后,还需要创建一个通道(Channel),所有的消息收发操作都是在这个频道内完成的。
Exchange(交换机):
核心作用:交换机负责路由和转发消息。
重要特性:交换机本身没有任何存储消息的能力。如果生产者把消息发送给了一个没有绑定任何队列的交换机,该消息将无法被路由,最终会直接丢失。
Queue(队列):队列才是真正用来存储消息的容器,消费者最终也是监听队列来获取并处理消息。
Binding(绑定):为了让交换机知道该把消息转发给谁,必须将队列和交换机进行绑定(Binding)。一旦绑定成功,发送到交换机的消息就可以被成功路由到对应的队列中,并被消费者接收。例如,绑定多个队列到一个交换机上时,交换机可以起到“大喇叭”广播的效果,让所有绑定的队列都收到消息。
三、 数据隔离机制(Virtual Host)
为什么需要数据隔离:RabbitMQ 的吞吐能力非常强(每秒几万到十万级),为了节省成本,公司内部的多个不同项目往往会共用同一套 MQ 集群。如果不加隔离,不同项目的交换机和队列名称极易发生冲突。
Virtual Host(虚拟主机):为了解决冲突问题,RabbitMQ 引入了 Virtual Host 的概念,它的作用类似于关系型数据库中的 DataBase(数据库)。
隔离效果:
在一个 MQ 实例中,可以创建多个不同的 Virtual Host。
每个 Virtual Host 都有自己专属的交换机和队列,起到了彻底的数据隔离作用。
即使在不同的 Virtual Host 中创建了同名的交换机或队列,它们之间也完全互不影响,就像不同 DataBase 中可以有同名的表一样。
最佳实践:在实际企业开发中,建议为每一个微服务项目创建一个专属的用户,并为该用户分配一个专属的 Virtual Host,让不同项目在各自独立的虚拟主机中收发消息,互不干扰。