Как понять вывод команд rabbitmqctl

$rabbitmqctl list_queues

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

Вывод rabbitmqctl выглядит следующим образом. Я не могу понять, для чего предназначен каждый столбец. Как я могу увидеть значение каждого столбца?

1 ответ

Для этого нет "легкого" решения, но мы - ИТ, и мы можем их построить. Я не эксперт ни в RabbitMQ, ни в программировании, но я сделаю все возможное, чтобы дать хороший ответ на этот вопрос, на случай, если кто-то придет сюда в поисках помощи.

Давайте возьмем точный случай перечисления очередей из консоли rabbitmqctl. Набрав "rabbitmqctl", вы получите список доступных команд:

Commands: 
[...]
list_queues [-p <vhost>] [--online] [--offline] [--local] [<queueinfoitem> ...] [-t <timeout>]
[...] 

Предполагая, что вы знаете, что такое vhost и очередь, скажем, вы хотите перечислить все очереди в vhost "TEST", тогда вам нужно будет набрать:

> rabbitmqctil list_queues -p TEST 
Timeout: 60.0 seconds ...
Listing queues for vhost TEST ...
test.queue 0

По умолчанию вы получаете только "имя" очереди и ее "текущую глубину". Где вы найдете все параметры очередей? Обратите особое внимание на слово "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

Но с небольшим воображением вы можете достичь этого:

----------------------------------------------------------
Msg. * Msg. * Msg. **       ** Cons. **         **** Name
Rdy * Unack * RAM *** Cons.  * Util. ** State    ***
----------------------------------------------------------
0       0       0       0               running     test.queue

Это не страшно, но лучше, чем по умолчанию. Я добился этого с помощью небольшого скрипта 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)

Конечно, это может быть улучшено многими способами, и критики всегда приветствуются, я все еще надеюсь, что это кому-то поможет.

Приветствия.

Другие вопросы по тегам