零基础学习RabbitMQ(3)--核心概念
我们在RabbitMQ的管理界面可以看到6个板块接下来我们逐步介绍每个板块
1. Overview
Overview是一个整体的概要信息 ,显示的是MQ整体的信息这里包含了其它板块的一些信息
下面有个Nodes代表的是节点信息
在 RabbitMQ 的管理控制台中,Nodes(节点) 代表 RabbitMQ 部署中的服务器实例 ,具体含义和作用如下:
RabbitMQ 支持单节点部署(仅 1 个 Node),也支持集群化部署(多个 Node 组成集群,共享队列、交换器等逻辑资源,提升可用性、吞吐量)。
“Nodes” 板块会展示 每个服务器节点的运行状态,帮助运维、开发人员监控节点健康度,排查性能或故障问题。
这里通过Name可以看到,是我们运行在云服务器上的实例
下方 Listening ports显示的是监听端口
- 5672:客户端和服务器建立连接时的端口号,代码操作
- 15672:管理界面端口号
- 25672:集群使用的端口号
2. admin
2.1 用户信息与操作
admin显示的是用户相关的信息,在这里可以看到用户的信息,可以看到当前有两个用户, 下面add auser可以添加用户
添加成功后会出现在表格上, 表格的四个列对应不同的含义:
- name:用户名
- tags:标签,即用户的身份权限
- can access virtual hosts:可以访问的虚拟主机
- has password:是否包含密码
点击对应的用户名可对该用户进行具体的设置:
2.2 虚拟机信息与操作
在admin页面下右边还有几个标签,我们看virtual hosts (虚拟主机),点开可以看到虚拟主机的一些信息,也可也添加虚拟主机,,点击主机名可以进一步设置虚拟主机。
虚拟主机的基本定义:
在 RabbitMQ 中,虚拟主机(Virtual Host) 是一个逻辑上的隔离单位,它相当于一个独立的 “小型 RabbitMQ 服务器”。每个虚拟主机都有自己独立的队列、交换机、绑定关系、用户权限等资源,不同虚拟主机之间的资源完全隔离,互不影响。
虚拟主机的核心作用:
-
资源隔离:不同业务线或项目可使用独立虚拟主机,避免因某个业务异常影响其他业务的消息服务。
-
权限控制:可针对每个虚拟主机单独设置用户权限(如读写、配置权限),实现精细化的访问控制。
-
环境隔离:方便区分开发、测试、生产等不同环境,例如通过不同虚拟主机隔离测试数据和线上数据。
3. Producer 和Consumer
Producer 和Consummer都是RabbitMQ Server的客户端,Producer为生产者,向RabbitMQ发送消息,Consumer 为消费者,从RabbitMQ接收消息
4. Connection 和Channel
- Connection:连接,是客户端和RabbitMQ服务器之间的一个TCP连接,这个连接是建立消息传递的基础,负责传输客户端和服务器之间的所有数据和控制信息。
- Channel:通道,Channel是在Connection上的一个抽象层,在RabbitMQ中,一个TCP连接可以有多个Channel,每个Channel都是独立的虚拟连接,消息的发送和接收都是基于Channel
Channel的作用:
- Channel可以让多个Producer共用一个Connection避免创建过多 TCP 连接,降低资源消耗。
- 不同 Channel 之间相互隔离,一个 Channel 的异常不会影响其他 Channel,提高系统稳定性。
- 不同业务模块可使用独立 Channel,避免相互影响。
5. Queue
Queue是RabbitMQ的内部对象,用于存储消息
6. Exchange
Exchange 是 RabbitMQ 中接收生产者发送消息的组件,负责根据路由规则将消息转发到一个或多个队列。它是实现生产者与消费者解耦的关键枢纽。
每个虚拟机有七个默认的内置交换机:
Exchange有几种核心的工作模式
- Routing (路由):根据消息的routing_key与绑定键(binding key)的精确匹配进行路由。交换机类型为Direct。应用场景:按用户 ID、订单 ID 等分类的消息;不同重要性级别的日志(error、info、warning)。
- Publish/subscribe(发布订阅):将接收到的消息广播到所有绑定的队列。交换机类型是fanout应用场景:系统通知、配置更新;监控数据分发到多个接收方。
- Topic(通配符):通过routing_key与绑定键的模式匹配进行路由,支持通配符,交换机类型是topic。应用场景:复杂的消息分类(如电商系统中的order.create、user.profile.update);基于主题的事件总线。
- Header(头部模式) :根据消息的headers 属性而非routing_key进行匹配,支持两种匹配规则:x-match=all:所有 headers 键值对必须匹配;x-match=any:任意一个 headers 键值对匹配即可。交换机类型是Headers。应用场景:基于元数据的消息过滤(如消息版本、设备类型)。替代复杂的 routing_key 匹配逻辑。
7. RabbitMQ工作流程
- 建立连接:生产者(Producer)和消费者(Consumer)分别通过 Connection(连接)与 RabbitMQ 服务器(Broker)建立网络连接,一个 Connection 里可创建多个 channel(信道 ),后续操作通过 channel 开展,减少频繁建立连接的开销。
- 消息发送(生产者侧):生产者通过 channel 向 Broker 发送消息,消息先抵达 Exchange(交换机 )。生产者需指定消息发往哪个 Exchange,还可设置 routing_key(路由键 )等参数。
- 消息路由(Broker 侧):Exchange 依据自身类型(如 direct、fanout、topic 等 )和与 Queue(队列 )的绑定关系(Bindings),结合消息的 routing_key 等信息,将消息路由到一个或多个 Queue 中。不同 Virtual Host 是逻辑隔离的,Exchange、Queue 等资源分属不同 Virtual Host,路由在对应 Virtual Host 内的资源间进行。
- 消息存储与消费(消费者侧):消息进入 Queue 后存储,消费者通过 channel 从 Queue 中获取消息进行消费。多个消费者可订阅同一 Queue,按配置的分发策略(如轮询、公平分发等 )获取消息处理,消费完需进行确认(ACK),告知 Broker 消息已处理,避免重复消费 。 整个流程实现了生产者和消费者的解耦,借助 RabbitMQ 的各类组件灵活控制消息的路由、存储和消费,支撑异步通信、流量削峰等场景。