如何理解rabbitmqctl命令的输出

Sum*_*nth 1 amqp rabbitmq node-amqplib

$rabbitmqctl list_queues

Timeout: 60.0 seconds ...
Listing queues for vhost / ...
privateTransactionQ 2
amq.gen-o9dl3Zj7HxS50gkTC2xbBQ  0
task_queue  0
Run Code Online (Sandbox Code Playgroud)

rabbitmqctl 的输出如下所示。我无法弄清楚每列的含义。我怎样才能看到每一列的含义?

P.v*_*lad 5

对此没有“简单”的解决方案,但我们是 IT,我们可以构建它们。我既不是 RabbitMQ 专家,也不是编程专家,但我会尽我所能给出一个好的答案,以防万一有人来这里寻求帮助。

让我们以从 rabbitmqctl 控制台列出队列的确切情况为例。通过输入“ rabbitmqctl ”,您可以获得可用命令的列表:

Commands: 
[...]
list_queues [-p <vhost>] [--online] [--offline] [--local] [<queueinfoitem> ...] [-t <timeout>]
[...] 
Run Code Online (Sandbox Code Playgroud)

假设您知道 vhost 和队列是什么,假设您想列出 vhost“ TEST ”中的所有队列,那么您需要键入:

> rabbitmqctil list_queues -p TEST 
Timeout: 60.0 seconds ...
Listing queues for vhost TEST ...
test.queue 0
Run Code Online (Sandbox Code Playgroud)

默认情况下,您只能获得队列的“名称”及其“当前深度”。你在哪里可以找到队列的所有参数?请特别注意您首先输入的帮助说明中的“ queueinfoitem ”一词。如果您看到 rabbitmqctl 帮助说明(通过键入“rabbitmqctl”),则在说明的末尾您可以看到参数“”的可用选项列表。

现在让我们看一个示例,您希望查看更高级的队列状态,例如:队列中的消息就绪、状态未确认的消息、消息 RAM、消费者、消费者的内存利用率、队列状态,当然还有它的名称.

你对一件事是对的:rabbitmqctl 不会以友好的方式返回结果。默认情况下,您会得到:

rabbitmqctl list_queues -p TEST  messages_ready, messages_unacknowledged, messages_ram, consumers, consumer_utilisation, state, name
Timeout: 60.0 seconds ...
Listing queues for vhost TEST ...
0       0       0       0               running test.queue
Run Code Online (Sandbox Code Playgroud)

但只要有一点想象力,你就可以做到这一点:

----------------------------------------------------------
Msg. * Msg. * Msg. **       ** Cons. **         **** Name
Rdy * Unack * RAM *** Cons.  * Util. ** State    ***
----------------------------------------------------------
0       0       0       0               running     test.queue
Run Code Online (Sandbox Code Playgroud)

这没什么大不了的,但比默认的要好。我用一个小的python脚本实现了这一点:

import os
vhosts = os.popen("rabbitmqctl list_vhosts name").read() 
logging.info(vhosts)
vhosts = vhosts.split("\n",1)[1]
vhosts = vhosts[:-1]
vhosts = vhosts.split("\n")
for vhost in vhosts: 
    header_a = "Msg. * Msg. * Msg. **       ** Cons. **         **** Name\n" 
    header_b = "Rdy * Unack * RAM *** Cons.  * Util. ** State    ***     \n"
    dash = "----------------------------------------------------------\n"
    queues = os.popen("rabbitmqctl list_queues -p " + vhost + " messages_ready, messages_unacknowledged, messages_ram, consumers, consumer_utilisation, state, name").read() 
    queues = queues.split("\n",2)[2]
    queues_list = dash + header_a + header_b + dash + queues
    print(queues_list)
Run Code Online (Sandbox Code Playgroud)

当然,这可以通过很多方式改进,并且总是欢迎批评者,我仍然希望它可以帮助某人。

干杯。