• 服务端状态
    • #队列信息:list_queues">#队列信息:list_queues
    • #交换器信息 list_exchanges">#交换器信息 list_exchanges
    • #绑定关系信息:list_bindings">#绑定关系信息:list_bindings
    • #TCP/IP 连接统计信息:list_connections">#TCP/IP 连接统计信息:list_connections
    • #信道信息:list_channels">#信道信息:list_channels
    • #消费者信息:list_consumers">#消费者信息:list_consumers
    • #Broker 状态:status">#Broker 状态:status
    • #健康检查:node_health_check">#健康检查:node_health_check
    • #环境变量:environment">#环境变量:environment
    • #服务器状态报告:report">#服务器状态报告:report
    • #执行 Erlang 表达式:eval">#执行 Erlang 表达式:eval
    • #eval 的扩展知识">#eval 的扩展知识

    服务端状态

    服务器状态查询会返回一个以制表符分隔的列表,以下命令都可以接受一个可选的 vhost 参数显示结果,默认值为 /

    • list_queues
    • list_exchanges
    • list_bindings
    • list_consumers

      #队列信息:list_queues

    1. rabbitmqctl list_queues [p vhost] [queueinfoitem ...]
    2. Copied!

    1

    返回队列的详细信息。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 ,则显示队列的名称和消息的个数。例如:

    1. # 默认显示队列名称和消息个数
    2. [root@study rabbitmq]# rabbitmqctl list_queues
    3. Listing queues
    4. queue_demo 205
    5. [root@study rabbitmq]# rabbitmqctl list_queues name durable auto_delete arguments -q
    6. queue_demo true false []
    7. Copied!

    1
    2
    3
    4
    5
    6
    7
    8

    #交换器信息 list_exchanges

    1. rabbitmqctl list_exchanges [-p vhost] {exchangeinfoitem...}
    2. Copied!

    1

    exchangeinfoitem 可以指定以下值:

    • name:交换器名称
    • type:交换器类型
    • durable:是否持久化
    • auto_delete:是否自动删除
    • internal:是否是内置的
    • arguments:其他一些结构化参数,比如 alternate-exchange
    • policy:应用到交换器上的策略名称

    exchangeinfoitem 的内容和客户端中的 channel.exchangeDeclare 方法的参数基本一致。如果没有指定 exchangeinfoitem 则默认显示交换器的名称和类型,例如:

    1. [root@study rabbitmq]# rabbitmqctl list_exchanges
    2. Listing exchanges
    3. amq.topic topic
    4. amq.direct direct
    5. amq.headers headers
    6. amq.match headers
    7. amq.rabbitmq.log topic
    8. amq.rabbitmq.trace topic
    9. exchange_demo direct
    10. amq.fanout fanout
    11. direct
    12. [root@study rabbitmq]# rabbitmqctl list_exchanges name type durable auto_delete internal arguments policy -q
    13. amq.topic topic true false false []
    14. amq.direct direct true false false []
    15. amq.headers headers true false false []
    16. amq.match headers true false false []
    17. amq.rabbitmq.log topic true false true []
    18. amq.rabbitmq.trace topic true false true []
    19. exchange_demo direct true false false []
    20. amq.fanout fanout true false false []
    21. direct true false false []
    22. Copied!

    1
    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

    1. rabbitmqctl list_bindings [-p vhost] [bindinginfoitem...]
    2. Copied!

    1

    bindinginfoitem 可以包含如下的值:

    • source_name:绑定中消息来源的名称
    • source_kind:绑定中消息来源的类别
    • destination_name:绑定中消息目的地名称
    • destination_kind:绑定中消息目的地的种类
    • routing_key:绑定的路由键
    • arguments:绑定的参数

    如果没有指定 bindinginfoitem ,则显示所有信息

    1. [root@study rabbitmq]# rabbitmqctl list_bindings
    2. Listing bindings
    3. exchange queue_demo queue queue_demo []
    4. exchange_demo exchange queue_demo queue routingky_demo []
    5. Copied!

    1
    2
    3
    4

    第一行:默认的交换器与队列 queue_demo 通过 queue_demo 绑定
    第二行:交换器 exchange_demo 和队列 queue_demo 通过 routingky_demo 进行绑定。

    #TCP/IP 连接统计信息:list_connections

    1. rabbitmqctl list_connections [connectioninfoitem ...]
    2. Copied!

    1

    返回 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-1
    • auth_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 信息

    1. [root@study rabbitmq]# rabbitmqctl list_connections
    2. Listing connections
    3. admin 192.168.4.170 52397 running
    4. # 自定义显示
    5. [root@study rabbitmq]# rabbitmqctl list_connections pid name host -q
    6. <rabbit@study.3.1744.0> 192.168.4.170:52434 -> 192.168.4.250:5672 192.168.4.250
    7. Copied!

    1
    2
    3
    4
    5
    6
    7
    8

    #信道信息:list_channels

    1. rabbitmqctl list_channels [channelinfoitem ...]
    2. Copied!

    1

    返回当前所有信息信息。 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

    1. # 默认信息
    2. [root@study rabbitmq]# rabbitmqctl list_channels
    3. Listing channels
    4. <rabbit@study.3.1833.0> admin 1 3
    5. # 自定义信息
    6. [root@study rabbitmq]# rabbitmqctl list_channels pid connection -q
    7. <rabbit@study.3.1854.0> <rabbit@study.3.1846.0>
    8. Copied!

    1
    2
    3
    4
    5
    6
    7
    8
    9

    #消费者信息:list_consumers

    1. rabbitmqctl list_consumers [ -p vhost]
    2. Copied!

    1

    显示消费者信息。每行将显示队列名称、相关信道的进程标识、consumerTag、是否需要消费端确认、prefetch_count 以及参数列表信息。

    1. [root@study rabbitmq]# rabbitmqctl list_consumers
    2. Listing consumers
    3. queue_demo <rabbit@study.3.1876.0> amq.ctag-1XZgy5ShO6X6e1qi7NQnTQ true 3 []
    4. Copied!

    1
    2
    3
    4

    #Broker 状态:status

    1. rabbitmqctl status
    2. Copied!

    1

    显示 Broker 状态,信息很多,例如有:Erlang 节点上运行的应用程序、RabbitMQ/Erlang 的版本信息、OS 名称、内存文件描述符等统计信息

    #健康检查:node_health_check

    1. rabbitmqctl node_health_check
    2. Copied!

    1

    对 RabbitMQ 节点进行健康检查,确认应用是否在很长运行、list_queues 和 list_channels 是否能够正常返回等。
    例如:

    1. [root@study rabbitmq]# rabbitmqctl node_health_check
    2. Timeout: 70.0 seconds
    3. Checking health of node rabbit@study
    4. Health check passed
    5. Copied!

    1
    2
    3
    4

    #环境变量:environment

    显示每个运行程序环境中的变量和值

    1. rabbitmqctl environment
    2. Copied!

    1

    返回信息很多,例如:

    1. [root@study rabbitmq]# rabbitmqctl environment
    2. Application environment of node rabbit@study
    3. [{amqp_client,[{prefer_ipv6,false},{ssl_options,[]}]},
    4. {asn1,[]},
    5. {compiler,[]},
    6. {cowboy,[]},
    7. {cowlib,[]},
    8. {crypto,[]},
    9. {inets,[]},
    10. ....
    11. Copied!

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    #服务器状态报告:report

    为所有服务器状态生成一个服务器状态报告,并将输出从定向到一个文件。

    1. rabbitmqctl report > report.txt
    2. Copied!

    1

    这个信息也是有很多的。例如:

    1. [root@study ~]# cat report.txt
    2. Reporting server status on {{2020,6,29},{0,21,37}}
    3. Status of node rabbit@study
    4. [{pid,20378},
    5. {running_applications,
    6. ...
    7. Copied!

    1
    2
    3
    4
    5
    6
    7
    8

    #执行 Erlang 表达式:eval

    1. rabbitmqctl eval {expr}
    2. Copied!

    1

    执行任意 Erlang 表达式。
    例如:返回 rabbitmqctl 连接的节点名称

    1. [root@study ~]# rabbitmqctl eval 'node().'
    2. rabbit@study
    3. Copied!

    1
    2

    #eval 的扩展知识

    用户、Parameter、vhost、权限等都可以通过 rabbitmqctl 工具来完成创建/删除操作。
    交换器、队列及绑定关系的创建/删除操作没有相应的工具 来完成。到目前为止的介绍,只有通 过客户端Web 管理界面 来完成。
    但是可以通过 rabbitmqctl eval {expr} 的方式来实现创建交换器、队列及绑定关系。
    下面的命令:创建一个交换器 exchange2、一个队列 queue2 ,并通过绑定建 rk2 进行绑定

    1. rabbitmqctl eval 'rabbit_exchange:declare({resource,<<"/">>,exchange,<<"exchange2">>},direct,true,false,false,[]).'
    2. rabbitmqctl eval 'rabbit_amqqueue:declare({resource,<<"/">>,queue,<<"queue2">>},true,false,[],none).'
    3. rabbitmqctl eval 'rabbit_binding:add({binding,{resource,<<"/">>,exchange,<<"exchange2">>},<<"rk2">>,{resource,<<"/">>,queue,<<"queue2">>},[]}).'
    4. Copied!

    1
    2
    3

    执行之后,查看绑定关系就看到如下信息

    1. [root@study ~]# rabbitmqctl list_bindings
    2. Listing bindings
    3. exchange queue2 queue queue2 []
    4. exchange queue_demo queue queue_demo []
    5. exchange2 exchange queue2 queue rk2 []
    6. exchange_demo exchange queue_demo queue routingky_demo []
    7. [root@study ~]#
    8. Copied!

    1
    2
    3
    4
    5
    6
    7
    8

    这里其实是调用了 Erlang 中对应模块的相应函数。语法类似 Module:Function(Arg).

    1. # 删除交换器
    2. rabbitmqctl eval 'rabbit_exchange:delete({resource,<<"/">>,exchange,<<"exchange2">>},false).'
    3. # 删除队列
    4. rabbitmqctl eval 'rabbit_amqqueue:internal_delete({resource,<<"/">>,queue,<<"queue2">>}).'
    5. # 删除绑定关系
    6. rabbitmqctl eval 'rabbit_binding:remove({binding,{resource,<<"/">>,exchange,<<"exchange2">>},<<"rk2">>,{resource,<<"/">>,queue,<<"queue2">>},[]}).'