# 服务端状态
服务器状态查询会返回一个以制表符分隔的列表,以下命令都可以接受一个可选的 vhost 参数显示结果,默认值为 /
- list_queues
- list_exchanges
- list_bindings
- list_consumers
# 队列信息:list_queues
rabbitmqctl list_queues [p vhost] [queueinfoitem ...]
返回队列的详细信息。queueinfoitem 用于 设置哪些队列的信息会包含在结果集中,结果集的列顺序将匹配参数的顺序。可以是下面的人任何值:
- name:队列名称
- durable:队列是否持久化
- auto_delete:队列是否自动删除
- arguments:队列的参数
- policy:应用到队列上的策略名称
- pid:队列关联的 Erlang 进程的 ID
- owner_pid:处理排他队列链接的 Erlang 进程 ID。如果此队列是非排他的,此值为空。
- exclusive:队列是否排他的
- exclusive_consumer_pid:订阅到此队列的消费者相关信道关联的 Erlang 进程 ID。如果此队列是非排他的,此值为空
- exclusive_consumer_tag:订阅到此排他队列的消费者的 consumerTag。如果此队列是非排他的。此值为空。
- messages_ready:准备发送给客户端的消息个数
- messages_unacknowledged:发送给客户端但尚未应答的消息个数
- messages:准备发送给客户端和未应答消息的总和
- messages_ready_ram:驻留在内存中 messages_ready 的消息个数
- messages_unacknowledged_ram:驻留在内中 messages_unacknowledged 的消息个数
- messages_ram:驻留在内存中的消息总数
- messages_persistent:队列中持久化消息的个数。对于非持久化队列来说总是 0。
- messages_bytes:队列中所有消息的大小总和。这里不包括消息属性或则任何其他开销。
- message_bytes_ready:准备发送给客户端的消息的大小总和
- message_bytes_unacknowledged:发送给客户端但尚未应答的消息的大小总和
- message_bytes_ram:驻留在内存中的 message_bytes
- messages_bytes_persistent:队列中持久化的 message_bytes
- disk_reads:从队列启动开始,已从磁盘中读取该队列的消息总次数
- disk_writes:从队列启动开始,已向磁盘队列写消息的总次数
- consumer:消费者数目
- consumer_utilisation:队列中的消息能够立刻投递给消费者的比率。介于 0 和 1 之间。受网络拥塞或则 Basic.Qos 的影响而小于 1.
- memory:与队列相关的 Erlang 进程所消耗的内存字节数,包括栈、堆及内部结构
- slave_pids:如果队列是镜像的,列出所有 slave 镜像的 pid
- synchronised_slave_pids:如果队列是镜像的,列出所有已经同步的 slave 镜像的 pid
- state:队列状态
- running:运行中
- syncing、MsgCount:队列正常同步数据库可能的状态
- down:如果队列所在的节点掉线了,则显示 down。此时大多数的 queueinfoitems 也将不可用
如果没有指定 queueinfoitems ,则显示队列的名称和消息的个数。例如:
# 默认显示队列名称和消息个数
[root@study rabbitmq]# rabbitmqctl list_queues
Listing queues
queue_demo 205
[root@study rabbitmq]# rabbitmqctl list_queues name durable auto_delete arguments -q
queue_demo true false []
2
3
4
5
6
7
8
# 交换器信息 list_exchanges
rabbitmqctl list_exchanges [-p vhost] {exchangeinfoitem...}
exchangeinfoitem 可以指定以下值:
- name:交换器名称
- type:交换器类型
- durable:是否持久化
- auto_delete:是否自动删除
- internal:是否是内置的
- arguments:其他一些结构化参数,比如 alternate-exchange
- policy:应用到交换器上的策略名称
exchangeinfoitem 的内容和客户端中的 channel.exchangeDeclare 方法的参数基本一致。如果没有指定 exchangeinfoitem 则默认显示交换器的名称和类型,例如:
[root@study rabbitmq]# rabbitmqctl list_exchanges
Listing exchanges
amq.topic topic
amq.direct direct
amq.headers headers
amq.match headers
amq.rabbitmq.log topic
amq.rabbitmq.trace topic
exchange_demo direct
amq.fanout fanout
direct
[root@study rabbitmq]# rabbitmqctl list_exchanges name type durable auto_delete internal arguments policy -q
amq.topic topic true false false []
amq.direct direct true false false []
amq.headers headers true false false []
amq.match headers true false false []
amq.rabbitmq.log topic true false true []
amq.rabbitmq.trace topic true false true []
exchange_demo direct true false false []
amq.fanout fanout true false false []
direct true false false []
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 绑定关系信息:list_bindings
rabbitmqctl list_bindings [-p vhost] [bindinginfoitem...]
bindinginfoitem 可以包含如下的值:
- source_name:绑定中消息来源的名称
- source_kind:绑定中消息来源的类别
- destination_name:绑定中消息目的地名称
- destination_kind:绑定中消息目的地的种类
- routing_key:绑定的路由键
- arguments:绑定的参数
如果没有指定 bindinginfoitem ,则显示所有信息
[root@study rabbitmq]# rabbitmqctl list_bindings
Listing bindings
exchange queue_demo queue queue_demo []
exchange_demo exchange queue_demo queue routingky_demo []
2
3
4
第一行:默认的交换器与队列 queue_demo 通过 queue_demo 绑定
第二行:交换器 exchange_demo 和队列 queue_demo 通过 routingky_demo 进行绑定。
# TCP/IP 连接统计信息:list_connections
rabbitmqctl list_connections [connectioninfoitem ...]
返回 TCP/IP 连接统计信息。connectioninfoitem 可以包含如下值:
pid:与连接相关的 Erlang 进程 ID
name:连接的名称
port:服务器端口
host:返回反向 DNS 获取的服务器主机名称,或则 IP 地址,或则未启用
peer_port:服务器对端端口。当一个客户端与服务器连接时,这个客户端的端口就是 peer_port
peer_host:返回反向 DNS 获取的对端主机名称,或则 IP 地址,或则未启用
ssl:是否启用 SSL
ssl_protocol:SSL 协议,如 tlsvl
ssl_key_exchange:SSL 密匙交换算法,如 rsa
ssl_cipher:SSL 加密算法,如 aes_256_cbc
ssl_hash:SSL 哈希算法,如 sha
peer_cert_subject:对端的 SSL 安全证书的主题,基于 RFC4514 的形式
peer_cert_issuer:对端 SSL 安全证书的发行者,基于 RFC4514
peer_cert_validity:对端 SSL 安全证书的有效期
state:链接状态。包括:
- starting
- tuning
- opening
- running
- flow
- blocking
- blocked
- closing
- closed
channels:该连接中的信道个数
protocol:使用的 AMQP 协议的版本
当前是
{0,9,1}
或{0,8,0}
,如果客户请求的是 AMQP 0-9 的连接,RabbitMQ 也会将其视为 0-9-1auth_mechanism:使用 SASL 认证机制,如 PLAIN、AMQPLAIN、EXTERNAL、RABBIT-CR-DEMO 等
user:与连接相关的用户名
vhost:与连接先关的 vhost 名称
timeout:链接超时/协商的心跳间隔,单位为秒
frame_max:最大传输帧的大小,单位为 B
channel_max:此连接上信道的最大数量
如果是 0,则表示无限,客户端一般会将 0 转为 65535
client_properties:在建立链接期间由客户端发送的信息属性
recv_oct:收到的字节数
recv_cnt:收到的数据包个数
send_oct:发送的字节数
send_cnt:发送的数据包个数
send_pend:发送队列大小
connected_at:链接建立的时间戳
如果么有指定 connectioninfoitem ,那么默认显示 user、peer_host、peer_port 和 state 信息
[root@study rabbitmq]# rabbitmqctl list_connections
Listing connections
admin 192.168.4.170 52397 running
# 自定义显示
[root@study rabbitmq]# rabbitmqctl list_connections pid name host -q
<rabbit@study.3.1744.0> 192.168.4.170:52434 -> 192.168.4.250:5672 192.168.4.250
2
3
4
5
6
7
8
# 信道信息:list_channels
rabbitmqctl list_channels [channelinfoitem ...]
返回当前所有信息信息。 channelinfoitem 可包含以下值:
- pid:与连接相关的 Erlang 进程 ID
- connection:信道所属链接的 Erlang 进程 ID
- name:信道的名称
- number:信道的序号
- user:与信道相关的用户名称
- vhost:与信道相关的 vhost
- transactional:信道是否处于事物模式
- confirm:信道是否处于 publisher confirm 模式
- consumer_count:信道中的消费者的个数
- messages_unacknowledged:已投递但是还未被 ack 的消息个数
- messages_uncommitted:已接收但还未提交事物的消息个数
- acks_uncommitted:已 ack 收到但是还未提交事物的消息个数
- messages_unconfirmed:已发送但是还未确认的消息个数。如果信道不处于 publisher confirm 模式下,则此值为 0
- perfetch_count:新消费者的 Qos 个数限制。0 标识无上限
- global_perfetch_count:整个信道的 Qos 个数限制。0 表示无上限
如果没有指定 channelinfoitem ,则显示:pid、user、consumer_count 、messages_unacknowledged
# 默认信息
[root@study rabbitmq]# rabbitmqctl list_channels
Listing channels
<rabbit@study.3.1833.0> admin 1 3
# 自定义信息
[root@study rabbitmq]# rabbitmqctl list_channels pid connection -q
<rabbit@study.3.1854.0> <rabbit@study.3.1846.0>
2
3
4
5
6
7
8
9
# 消费者信息:list_consumers
rabbitmqctl list_consumers [ -p vhost]
显示消费者信息。每行将显示队列名称、相关信道的进程标识、consumerTag、是否需要消费端确认、prefetch_count 以及参数列表信息。
[root@study rabbitmq]# rabbitmqctl list_consumers
Listing consumers
queue_demo <rabbit@study.3.1876.0> amq.ctag-1XZgy5ShO6X6e1qi7NQnTQ true 3 []
2
3
4
# Broker 状态:status
rabbitmqctl status
显示 Broker 状态,信息很多,例如有:Erlang 节点上运行的应用程序、RabbitMQ/Erlang 的版本信息、OS 名称、内存文件描述符等统计信息
# 健康检查:node_health_check
rabbitmqctl node_health_check
对 RabbitMQ 节点进行健康检查,确认应用是否在很长运行、list_queues 和 list_channels 是否能够正常返回等。
例如:
[root@study rabbitmq]# rabbitmqctl node_health_check
Timeout: 70.0 seconds
Checking health of node rabbit@study
Health check passed
2
3
4
# 环境变量:environment
显示每个运行程序环境中的变量和值
rabbitmqctl environment
返回信息很多,例如:
[root@study rabbitmq]# rabbitmqctl environment
Application environment of node rabbit@study
[{amqp_client,[{prefer_ipv6,false},{ssl_options,[]}]},
{asn1,[]},
{compiler,[]},
{cowboy,[]},
{cowlib,[]},
{crypto,[]},
{inets,[]},
....
2
3
4
5
6
7
8
9
10
# 服务器状态报告:report
为所有服务器状态生成一个服务器状态报告,并将输出从定向到一个文件。
rabbitmqctl report > report.txt
这个信息也是有很多的。例如:
[root@study ~]# cat report.txt
Reporting server status on {{2020,6,29},{0,21,37}}
Status of node rabbit@study
[{pid,20378},
{running_applications,
...
2
3
4
5
6
7
8
# 执行 Erlang 表达式:eval
rabbitmqctl eval {expr}
执行任意 Erlang 表达式。
例如:返回 rabbitmqctl 连接的节点名称
[root@study ~]# rabbitmqctl eval 'node().'
rabbit@study
2
# eval 的扩展知识
用户、Parameter、vhost、权限等都可以通过 rabbitmqctl 工具来完成创建/删除操作。
而 交换器、队列及绑定关系的创建/删除操作没有相应的工具 来完成。到目前为止的介绍,只有通 过客户端 或 Web 管理界面 来完成。
但是可以通过 rabbitmqctl eval {expr}
的方式来实现创建交换器、队列及绑定关系。
下面的命令:创建一个交换器 exchange2、一个队列 queue2 ,并通过绑定建 rk2 进行绑定
rabbitmqctl eval 'rabbit_exchange:declare({resource,<<"/">>,exchange,<<"exchange2">>},direct,true,false,false,[]).'
rabbitmqctl eval 'rabbit_amqqueue:declare({resource,<<"/">>,queue,<<"queue2">>},true,false,[],none).'
rabbitmqctl eval 'rabbit_binding:add({binding,{resource,<<"/">>,exchange,<<"exchange2">>},<<"rk2">>,{resource,<<"/">>,queue,<<"queue2">>},[]}).'
2
3
执行之后,查看绑定关系就看到如下信息
[root@study ~]# rabbitmqctl list_bindings
Listing bindings
exchange queue2 queue queue2 []
exchange queue_demo queue queue_demo []
exchange2 exchange queue2 queue rk2 []
exchange_demo exchange queue_demo queue routingky_demo []
[root@study ~]#
2
3
4
5
6
7
8
这里其实是调用了 Erlang 中对应模块的相应函数。语法类似 Module:Function(Arg).
# 删除交换器
rabbitmqctl eval 'rabbit_exchange:delete({resource,<<"/">>,exchange,<<"exchange2">>},false).'
# 删除队列
rabbitmqctl eval 'rabbit_amqqueue:internal_delete({resource,<<"/">>,queue,<<"queue2">>}).'
# 删除绑定关系
rabbitmqctl eval 'rabbit_binding:remove({binding,{resource,<<"/">>,exchange,<<"exchange2">>},<<"rk2">>,{resource,<<"/">>,queue,<<"queue2">>},[]}).'
2
3
4
5
6
7
8
← 应用与集群管理 HTTP API 接口管理 →