Чи можливо переглядати вміст повідомлення RabbitMQ безпосередньо з командного рядка?


101

Чи можливо переглядати вміст повідомлення RabbitMQ безпосередньо з командного рядка?

sudo rabbitmqctl list_queues перелічує черги.

Чи є якась така команда sudo rabbitmqctl list_queue_messages <queue_name>?


1
Щодо розміщення rabbitmqadmin на Linux stackoverflow.com/questions/36336071 / ...
Олексій Кущ

Відповіді:


107

Вам слід включити плагін управління.

rabbitmq-plugins enable rabbitmq_management

Дивіться тут:

http://www.rabbitmq.com/plugins.html

І тут для специфіки управління.

http://www.rabbitmq.com/management.html

Нарешті, після налаштування вам потрібно буде дотримуватися інструкцій нижче, щоб встановити та використовувати інструмент rabbitmqadmin. Які можна використовувати для повноцінного взаємодії з системою. http://www.rabbitmq.com/management-cli.html

Наприклад:

rabbitmqadmin get queue=<QueueName> requeue=false

дасть вам перше повідомлення з черги.


1
Дякую, працює для мене! це може сприяти: за замовчуванням rabbitmqadmin не можна викликати звідусіль. Розташований у /var/lib/rabbitmq/mnesia/rabbit@NODENAME-plugins-expand/rabbitmq_management-3.1.3/priv/www/cli. Для цього потрібно виправити дозволи (chmod 755 rabbitmqadmin) і, можливо, скопіювати його в / usr / local / bin, див. Rabbitmq.com/management-cli.html
Scherbius.com

Ні, ви можете завантажити його за посиланням і зробити його доступним, поставивши його десь на своєму шляху.
robthewolf

7
Якщо ви хочете лише переглянути повідомлення, а не виносити його з черги, вам слід скинути requeue=falseшматочок і просто зробитиrabbitmqadmin get queue=<QueueName>
Jonatan

1
Вам слід пам’ятати, що запитуючі повідомлення встановлюють прапор повторної доставки, тому наступні споживачі не отримають ідентичне повідомлення
aKiRa

Чи можу я бачити вміст повідомлень у веб-інтерфейсі?
gstackoverflow

40

Ось команди, які я використовую для отримання вмісту черги:

RabbitMQ версії 3.1.5 на Linux Linux Fedora за допомогою https://www.rabbitmq.com/management-cli.html

Ось мої біржі:

eric@dev ~ $ sudo python rabbitmqadmin list exchanges
+-------+--------------------+---------+-------------+---------+----------+
| vhost |        name        |  type   | auto_delete | durable | internal |
+-------+--------------------+---------+-------------+---------+----------+
| /     |                    | direct  | False       | True    | False    |
| /     | kowalski           | topic   | False       | True    | False    |
+-------+--------------------+---------+-------------+---------+----------+

Ось моя черга:

eric@dev ~ $ sudo python rabbitmqadmin list queues
+-------+----------+-------------+-----------+---------+------------------------+---------------------+--------+----------+----------------+-------------------------+---------------------+--------+---------+
| vhost |   name   | auto_delete | consumers | durable | exclusive_consumer_tag |     idle_since      | memory | messages | messages_ready | messages_unacknowledged |        node         | policy | status  |
+-------+----------+-------------+-----------+---------+------------------------+---------------------+--------+----------+----------------+-------------------------+---------------------+--------+---------+
| /     | myqueue  | False       | 0         | True    |                        | 2014-09-10 13:32:18 | 13760  | 0        | 0              | 0                       |rabbit@ip-11-1-52-125|        | running |
+-------+----------+-------------+-----------+---------+------------------------+---------------------+--------+----------+----------------+-------------------------+---------------------+--------+---------+

Затисніть деякі елементи в мій черзі:

curl -i -u guest:guest http://localhost:15672/api/exchanges/%2f/kowalski/publish -d '{"properties":{},"routing_key":"abcxyz","payload":"foobar","payload_encoding":"string"}'
HTTP/1.1 200 OK
Server: MochiWeb/1.1 WebMachine/1.10.0 (never breaks eye contact)
Date: Wed, 10 Sep 2014 17:46:59 GMT
content-type: application/json
Content-Length: 15
Cache-Control: no-cache

{"routed":true}

RabbitMQ бачити повідомлення в черзі:

eric@dev ~ $ sudo python rabbitmqadmin get queue=myqueue requeue=true count=10
+-------------+----------+---------------+---------------------------------------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count |                        payload        | payload_bytes | payload_encoding | properties | redelivered |
+-------------+----------+---------------+---------------------------------------+---------------+------------------+------------+-------------+
| abcxyz      | kowalski | 10            | foobar                                | 6             | string           |            | True        |
| abcxyz      | kowalski | 9             | {'testdata':'test'}                   | 19            | string           |            | True        |
| abcxyz      | kowalski | 8             | {'mykey':'myvalue'}                   | 19            | string           |            | True        |
| abcxyz      | kowalski | 7             | {'mykey':'myvalue'}                   | 19            | string           |            | True        |
+-------------+----------+---------------+---------------------------------------+---------------+------------------+------------+-------------+

2
Це команда sudo python rabbitmqadmin get queue=myqueue requeue=true count=10переглядати повідомлення або відміняти повідомлення з кінця, а потім передати їх на передню частину. Чи є спосіб просто побачити повідомлення замість того, щоб їх передати.
Акшай Хазарі

Я припускаю, що get and requeue = true по суті говорить нам, що повідомлення видаляються та відображаються та видаються повторно (push_back вперед).
Акшай Хазарі

1
Як rabbitmqadminпідключається до веб-API, чи тут потрібна sudo?
Richlv

Чомуrequeue=True
Стівен

20

Я написав rabbitmq-dump-чергу, яка дозволяє скидати повідомлення з черви RabbitMQ у локальні файли та подавати повідомлення в їх початковому порядку.

Приклад використання (для скидання перших 50 повідомлень черги incoming_1):

rabbitmq-dump-queue -url="amqp://user:password@rabbitmq.example.com:5672/" -queue=incoming_1 -max-messages=50 -output-dir=/tmp

10

ви можете використовувати API RabbitMQ для отримання підрахунку чи повідомлень:

/api/queues/vhost/name/get

Отримуйте повідомлення з черги. (Це не HTTP GET, оскільки це змінить стан черги.) Ви повинні розмістити тіло, схоже на:

{"count":5,"requeue":true,"encoding":"auto","truncate":50000}

count контролює максимальну кількість повідомлень для отримання. Ви можете отримати менше повідомлень, ніж це, якщо черга не може негайно їх надати.

requeue визначає, чи будуть повідомлення видалені з черги. Якщо реквізит відповідає дійсності, вони будуть повернені, але їх встановлений прапор буде встановлено. кодування має бути або "auto" (у цьому випадку корисне навантаження буде повернуто у вигляді рядка, якщо воно дійсне UTF-8, а base64 закодовано в іншому випадку), або "base64" (у такому випадку корисне навантаження завжди буде закодовано base64). Якщо усікання присутнє, воно обрізає корисне навантаження повідомлення, якщо воно перевищує заданий розмір (у байтах). усікати необов’язково; всі інші клавіші є обов'язковими.

Зауважте, що шляхи публікації / отримання в HTTP API призначені для введення тестових повідомлень, діагностики тощо - вони не реалізують надійну доставку, і тому їх слід розглядати як інструмент sysadmin, а не загальний API для обміну повідомленнями.

http://hg.rabbitmq.com/rabbitmq-management/raw-file/rabbitmq_v3_1_3/priv/www/api/index.html


4

трохи пізно до цього, але так, rabbitmq має вбудований трекер, який дозволяє бачити вхідні повідомлення в журналі. Якщо ввімкнено, ви можете просто tail -f /var/tmp/rabbitmq-tracing/.log(на комп'ютері) переглядати повідомлення.

докладний опис тут http://www.mikeobrien.net/blog/tracing-rabbitmq-messages


3
Посилання розірвано. Дзеркало: web.archive.org/web/20160319074032/http: //www.mikeobrien.net / ... . Приємна користувацька сторінка помилок BTW :)
xtreak

0

Якщо ви хочете кілька повідомлень з черги, скажімо, 10 повідомлень, команда, яку слід використовувати:

rabbitmqadmin get queue=<QueueName> ackmode=ack_requeue_true count=10

Якщо ви не хочете, щоб повідомлення надсилалися, просто перейдіть ackmodeна ack_requeue_false.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.