Можно ли просматривать содержимое сообщения RabbitMQ непосредственно из командной строки?


102

Можно ли просматривать содержимое сообщения 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 / местные / бен см rabbitmq.com/management-cli.html
Scherbius.com

Нет, вы можете скачать его по ссылке и сделать доступным, поместив где-нибудь на своем пути.
robthewolf

7
Если вы хотите только просмотреть сообщение, а не вынимать его из очереди, вам следует отбросить requeue=falseбит и просто сделатьrabbitmqadmin get queue=<QueueName>
jonatan

1
Вы должны знать, что сообщения с повторной постановкой в ​​очередь устанавливают флаг повторной доставки, поэтому последующие потребители не получат идентичное сообщение
aKiRa

Могу ли я увидеть содержимое сообщений в веб-интерфейсе?
gstackoverflow

40

Вот команды, которые я использую для получения содержимого очереди:

RabbitMQ версии 3.1.5 в Fedora linux с использованием 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 |
+-------+----------+-------------+-----------+---------+------------------------+---------------------+--------+----------+----------------+-------------------------+---------------------+--------+---------+

Поместите в myqueue несколько элементов:

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 и Requeue = true по существу сообщает нам, что сообщения удаляются из очереди, отображаются и повторно ставятся в очередь (push_back на передний план).
Акшай Хазари,

1
Как rabbitmqadminподключается к веб-API, здесь требуется sudo?
Richlv

Почемуrequeue=True
стивен

20

Я написал rabbitmq-dump-queue, который позволяет выгружать сообщения из очереди 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

вы можете использовать RabbitMQ API для получения счетчика или сообщений:

/api/queues/vhost/name/get

Получать сообщения из очереди. (Это не HTTP-запрос GET, так как он изменяет состояние очереди.) Вы должны опубликовать тело, выглядящее следующим образом:

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

count контролирует максимальное количество получаемых сообщений. Вы можете получить меньше сообщений, если очередь не может предоставить их немедленно.

Requeue определяет, будут ли сообщения удаляться из очереди. Если Requeue истинно, они будут повторно поставлены в очередь, но их флаг повторной доставки будет установлен. кодирование должно быть либо «автоматическим» (в этом случае полезная нагрузка будет возвращена в виде строки, если она действительна в кодировке UTF-8, и в противном случае в кодировке base64), либо «base64» (в этом случае полезная нагрузка всегда будет в кодировке base64). Если присутствует truncate, он усекает полезную нагрузку сообщения, если она больше указанного размера (в байтах). усечение необязательно; все остальные ключи являются обязательными.

Обратите внимание, что пути публикации / получения в HTTP API предназначены для ввода тестовых сообщений, диагностики и т. Д. - они не обеспечивают надежную доставку и поэтому должны рассматриваться как инструмент системного администратора, а не как общий 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(на Mac) просматривать сообщения.

подробное описание здесь http://www.mikeobrien.net/blog/tracing-rabbitmq-messages


3
Ссылка не работает. Зеркало: web.archive.org/web/20160319074032/http://www.mikeobrien.net/… . Хорошая пользовательская страница ошибок, кстати :)
xtreak 08

1

Если вам нужно несколько сообщений из очереди, скажем 10 сообщений, используйте следующую команду:

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

Если вы не хотите, чтобы сообщения повторно ставились в очередь, просто измените ackmodeна ack_requeue_false.


плюс один ackmode=ack_requeue_true, больше нет такой requeueопции, как упоминалось в других ответах
Ник Роз,
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.