
一、OverviewConnectionsChannelsExchangesQueues and StreamsAdmin这些菜单分别对应RabbitMQ的整体状态、客户端连接、消息通道、交换机、队列以及系统管理等功能Rabbitmq中一条完整的消息传递流程通常如下生产者↓Connection↓Channel↓Exchange↓Binding↓Queue↓Channel↓消费者二、这部分是 RabbitMQ Management管理控制台Overview 首页中的 Nodes节点信息 区域。它主要用于监控 RabbitMQ 节点的运行状态包括节点名称、文件描述符、Erlang 进程数、内存使用情况、磁盘空间、运行时间以及 CPU 核心数等。对于 RabbitMQ 运维来说这部分非常重要可以帮助我们快速判断 RabbitMQ 服务是否正常运行以及是否存在内存、磁盘或系统资源方面的风险。Name节点名称rabbit0e52a0973d3f表示当前节点的名称。用分隔符0e52a0973d3f表示当前主机的主机名rabbitRabbitMQ 节点名称rabbithostname如果部署集群每个节点都需要有唯一的节点名称File desciptors文件描述符文件描述符File Descriptor简称 FD是操作系统用于标识打开文件、网络连接等资源的整数。在 RabbitMQ 中文件描述符主要用于客户端 TCP 连接。节点之间的网络通信。文件读写操作。日志及其他系统资源访问。44表示当前使用的文件描述符数量1073741816 available 表示剩余可用数量受操作系统限制、进程限制文件描述数量过低可能导致RabbitMQ无法正常建立新的网络连接Erlang processesErlang进程RabbitMQ 底层使用 Erlang/OTP 运行而 Erlang 使用轻量级进程Process实现并发处理。这些进程与操作系统中的 Windows/Linux 进程不是同一个概念。RabbitMQ 内部会通过大量 Erlang 进程处理不同的任务例如消息接收与发送。队列消息处理。网络连接管理。消费者消息分发。集群节点通信。内部定时任务。559 表示当前Erlang进程数量10498576 avaliable 当前距离Erlang进程数量上限的可用额度如果Erlang进程数量接近上线可能导致RabbitMQ无法创建新的内部进程影响消息梳理及服务稳定性Memory内存用于监控RabbitMQ当前的内存使用情况247 MiB 表示当前RabbitMQ节点的内存使用量4.7GIB high watemark 内存高水位阈值 当达到阈值时会触发内存保护机制暂停或者限制消息发布避免内存耗尽。Disk space磁盘空间用于监控RabbitMQ所在节点的磁盘空间54 GIB 当前可用磁盘空间48 MIB low watermark 磁盘空间低水位阈值RabbitMQ不仅会在内存中处理消息也可能将消息持久化到磁盘当磁盘剩余空间低于低水位阈值时会发出磁盘警告触发后会限制消息发布防止磁盘空间耗尽。Uptime运行时间表示当前RabbitMQ节点已经连续运行了多少时间这个指标可以帮助判断最近是否发生过重启例如运行时间持续增长节点持续运行。运行时间突然归零可能发生了服务重启。频繁归零需要排查服务异常、系统重启或容器重启等问题。Cores CPU核心数表示当前RabbitMQ节点检测到的CPU核心数量Info界定信息这里展示的是节点相关的附加信息和状态标记。其中 rss 是 RabbitMQ 节点的相关状态标记basic、2 等属于管理页面展示的节点信息标识不是内存、CPU 或磁盘使用量。这一列不属于日常资源监控的核心指标实际排查问题时应重点关注前面的资源数据。Reset stats重置统计数据this node 重置当前节点的统计数据all nodes 重置集群中手头节点的统计数据这俩按钮主要用于监控统计数据的重置三、ConnectionsRabbitMQ Management管理控制台中的 Connections连接 页面Connections 是 RabbitMQ 中非常重要的一个监控模块主要用于查看客户端与 RabbitMQ Broker 之间的网络连接情况。例如在实际开发中Java 服务通过 Spring AMQP 连接 RabbitMQ。.NET 服务通过 RabbitMQ.Client 连接 RabbitMQ。多个业务系统同时连接 RabbitMQ。消费者通过连接从 RabbitMQ 获取消息。生产者通过连接向 RabbitMQ 发布消息。这些客户端与 RabbitMQ 建立的连接都可以在 Connections 页面中查看。Connections 连接概述RabbitMQ 中的 Connection连接表示客户端与 RabbitMQ Broker 之间建立的 TCP 网络连接。客户端通过 Connection 与 RabbitMQ 通信完成消息发布、消息消费、队列声明、交换机声明等操作。需要区分两个概念Connection客户端与 RabbitMQ 之间的 TCP 连接。Channel建立在 Connection 之上的逻辑通信通道。一个 Connection 可以创建多个 Channel。Java 应用程序|| TCP Connection|RabbitMQ Broker|±— Channel 1|±— Channel 2|±— Channel 3实际开发中通常不会为每一次消息发送都重新建立 TCP 连接而是复用 Connection通过多个 Channel 完成不同业务操作。State连接状态状态含义running连接正常运行closing连接正在关闭blocked连接被阻塞通常与资源告警或流量控制有关SSL / TLS安全连接○ 表示当前连接没有启用 SSL/TLS。SSL/TLS 用于对客户端与 RabbitMQ 之间的网络通信进行加密。AMQP 5672 普通 TCP 通信AMQPS 5671 TLS 加密通信生产环境中如果 RabbitMQ 需要通过公网或不可信网络进行通信建议配置 TLS保护消息传输安全。Protocol通信协议表示当前客户端使用 AMQP 0-9-1 协议与 RabbitMQ 通信。AMQPAdvanced Message Queuing Protocol是一种消息队列通信协议。RabbitMQ 默认支持 AMQP 0-9-1 协议也是 Java Spring AMQP、RabbitMQ.Client 等客户端常用的协议。可以简单理解为客户端|| AMQP 0-9-1|RabbitMQ客户端和 RabbitMQ 需要使用兼容的通信协议才能正常进行消息交互。Channels通道数量表示当前 Connection 上创建了 1 个 Channel。Channel 是建立在 TCP Connection 之上的逻辑通信通道。为什么需要 Channel因为创建 TCP 连接需要一定的系统资源和网络开销。如果每次执行消息操作都创建新的 TCP 连接效率会比较低。因此 RabbitMQ 采用 Connection Channel 的方式Connection 负责底层 TCP 网络连接。Channel 负责具体的 AMQP 操作。一个 Connection 可以创建多个 Channel。实际开发中通常使用 Connection 复用和 Channel 管理机制提高通信效率。From client客户端流量表示客户端向 RabbitMQ 发送的数据速率。表示当前统计周期内客户端平均每秒向 RabbitMQ 发送约 18 字节的数据。客户端发送的数据可能包括消息发布数据。AMQP 协议帧。心跳及其他协议通信数据。因此这个指标并不完全等于业务消息的数据量。To client服务端流量表示 RabbitMQ 向客户端发送的数据速率。常见场景RabbitMQ 向消费者推送消息。返回消息确认结果。返回队列或交换机声明结果。发送心跳及其他协议数据。From client 和 To client 可以帮助我们分析客户端与 RabbitMQ 之间的数据通信情况。指标方向含义From client客户端 → RabbitMQ客户端发送的数据To clientRabbitMQ → 客户端RabbitMQ 发送的数据四、ChannelsChannel通道是建立在 ConnectionTCP 连接之上的逻辑通信通道。RabbitMQ 客户端建立 TCP 连接后可以在这个连接上创建多个 Channel通过不同的 Channel 执行消息发布、消费、队列声明、交换机声明等操作。一个 Connection 可以创建多个 Channel。使用 Channel 的好处是可以复用底层 TCP 连接减少频繁创建网络连接带来的资源开销。主要分为三个区域Overview通道基本信息。Details通道详细信息。Message rates消息速率统计。State通道状态running Channel 正在执行相关操作idle Channel 当前处于空闲状态idle 并不代表 Channel 已关闭或者出现故障只是表示当前没有活跃的操作需要执行。Unconfirmed未确认发布消息表示当前 Channel 上没有等待 Broker 确认的消息发布请求。这里涉及 RabbitMQ 的 Publisher Confirms生产者发布确认机制。生产者发送消息时可以开启发布确认机制让 RabbitMQ 在接收并处理发布请求后向生产者返回确认结果。Producer|| 发布消息vRabbitMQ|| 处理消息v返回 Publisher Confirm|vProducer 收到确认如果消息已经发布但生产者还没有收到 Broker 的确认那么这条消息就属于未确认发布消息。Unconfirmed 与 Unacked 是两个不同的概念。Unconfirmed生产者发布消息后等待 Broker 确认。Unacked消费者接收消息后尚未向 Broker 确认。Prefetch预取数量Prefetch 是 RabbitMQ 消费者消息预取机制中的重要参数。它用于控制消费者在尚未确认消息的情况下可以预先获取多少条消息。Unacked未确认消息Unacked 是 RabbitMQ 消费者消息确认机制中的一个重要指标。它表示消息已经被 RabbitMQ 投递给消费者但是消费者还没有向 RabbitMQ 返回确认结果。五、ExchangesExchange交换机是 RabbitMQ 消息路由机制中的核心组件主要负责接收生产者发送的消息并根据交换机类型、Routing Key路由键以及 Binding绑定关系将消息路由到一个或多个队列。Producer生产者|| 发送消息vExchange交换机|| 根据路由规则分发vQueue队列|| 消费消息vConsumer消费者Exchange 本身不负责存储消息它主要负责消息的接收和路由。 消息最终进入队列由队列负责存储和等待消费者处理。Virtual host虚拟主机表示交换机所属的虚拟主机。/ 默认虚拟主机/dev 开发环境/test 测试环境/prod 生产环境通过不同的 Virtual Host可以对不同业务环境或业务系统进行逻辑隔离。Type交换机类型Direct Exchange直连交换机根据 Routing Key 精确匹配队列的 Binding Key。例如Routing Key: order.createQueue A: order.create - 匹配Queue B: order.update - 不匹配Fanout Exchange广播交换机将消息广播到所有绑定的队列不考虑 Routing Key。例如一个系统通知消息同时发送给多个业务队列。Topic Exchange主题交换机根据 Routing Key 和 Binding Key 的模式进行匹配。例如Routing Key: waterlogging.event.warningBinding Key: waterlogging.event.**匹配一个单词。#匹配零个或多个单词。Headers Exchange头部交换机根据消息 Header 属性进行路由而不是根据 Routing Key。常见匹配模式x-match all所有指定条件都满足。x-match any任意一个指定条件满足。类型路由依据主要用途DirectRouting Key 精确匹配指定业务路由Fanout不考虑 Routing Key消息广播TopicRouting Key 模式匹配多业务分类路由Headers消息 Header按消息属性路由实际开发建议明确指定业务目标优先考虑 Direct。多个业务模块都需要收到消息考虑 Fanout。需要按照业务类型、事件类型进行分类考虑 Topic。需要根据消息属性组合路由考虑 Headers。Features交换机特性Durable持久化交换机设置为持久化后RabbitMQ 重启时仍会保留该交换机定义。需要注意交换机持久化不代表消息持久化。消息是否能够在重启后保留还需要考虑队列类型、消息持久化属性等因素。六、Queues and StreamsQueue队列是 RabbitMQ 中用于存储消息的重要组件。生产者通常不会直接把消息发送到队列而是将消息发送到 Exchange由 Exchange 根据绑定关系和路由规则将消息投递到对应 Queue。七、创建Virtual HostVirtual Host 是什么Virtual Host 是 RabbitMQ 提供的一种逻辑隔离机制。可以把它理解为 RabbitMQ 内部的一个独立消息管理空间。不同 Virtual Host 之间的交换机、队列和绑定关系相互隔离。每个 Virtual Host 都可以拥有自己独立的Exchanges交换机Queues队列Bindings绑定关系Permissions用户权限