首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解rabbitmqctl命令的输出

如何理解rabbitmqctl命令的输出
EN

Stack Overflow用户
提问于 2018-03-12 14:22:53
回答 1查看 2.6K关注 0票数 1
代码语言:javascript
复制
$rabbitmqctl list_queues

Timeout: 60.0 seconds ...
Listing queues for vhost / ...
privateTransactionQ 2
amq.gen-o9dl3Zj7HxS50gkTC2xbBQ  0
task_queue  0

兔looks的输出如下所示。我搞不懂每一列的目的是什么。我怎样才能看到每一列的意义?

EN

回答 1

Stack Overflow用户

发布于 2018-05-14 15:49:22

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

让我们来看看从rabbitmqctl控制台中列出队列的确切例子。通过键入"rabbitmqctl“,您将得到可用命令的列表:

代码语言:javascript
复制
Commands: 
[...]
list_queues [-p <vhost>] [--online] [--offline] [--local] [<queueinfoitem> ...] [-t <timeout>]
[...] 

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

代码语言:javascript
复制
> rabbitmqctil list_queues -p TEST 
Timeout: 60.0 seconds ...
Listing queues for vhost TEST ...
test.queue 0

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

现在,让我们看一个例子,您希望看到队列的更高级状态:队列中准备好的消息,状态不明的消息,消息RAM,使用者,用户的内存利用率,队列的状态,当然还有它的名称。

关于一件事,你是对的:兔子没有以友好的方式返回结果。默认情况下,您可以得到以下内容:

代码语言:javascript
复制
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

但是,只要稍加想象,你就可以做到这一点:

代码语言:javascript
复制
----------------------------------------------------------
Msg. * Msg. * Msg. **       ** Cons. **         **** Name
Rdy * Unack * RAM *** Cons.  * Util. ** State    ***
----------------------------------------------------------
0       0       0       0               running     test.queue

这没什么大不了的,但总比违约好。我通过一个小python脚本实现了这一点:

代码语言:javascript
复制
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)

当然,这可以在很多方面得到改善,而批评者也总是受到欢迎,我仍然希望它能帮助到一些人。

干杯。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49237580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档