Можно ли просматривать содержимое сообщения RabbitMQ непосредственно из командной строки?
sudo rabbitmqctl list_queues
перечисляет очереди.
Есть какая-нибудь команда вроде sudo rabbitmqctl list_queue_messages <queue_name>
?
Можно ли просматривать содержимое сообщения RabbitMQ непосредственно из командной строки?
sudo rabbitmqctl list_queues
перечисляет очереди.
Есть какая-нибудь команда вроде sudo rabbitmqctl list_queue_messages <queue_name>
?
Ответы:
Вы должны включить плагин управления.
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
предоставит вам первое сообщение из очереди.
requeue=false
бит и просто сделатьrabbitmqadmin get queue=<QueueName>
Вот команды, которые я использую для получения содержимого очереди:
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 |
+-------------+----------+---------------+---------------------------------------+---------------+------------------+------------+-------------+
sudo python rabbitmqadmin get queue=myqueue requeue=true count=10
для просмотра сообщений или удаления сообщений с конца, а затем повторного включения их в очередь. Есть ли способ просто просмотреть сообщения, а не удалять их из очереди.
rabbitmqadmin
подключается к веб-API, здесь требуется sudo?
requeue=True
Я написал 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
вы можете использовать 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
немного поздно, но да, у rabbitmq есть встроенный трассировщик, который позволяет вам видеть входящие сообщения в журнале. Когда он включен, вы можете просто tail -f /var/tmp/rabbitmq-tracing/.log
(на Mac) просматривать сообщения.
подробное описание здесь http://www.mikeobrien.net/blog/tracing-rabbitmq-messages
Если вам нужно несколько сообщений из очереди, скажем 10 сообщений, используйте следующую команду:
rabbitmqadmin get queue=<QueueName> ackmode=ack_requeue_true count=10
Если вы не хотите, чтобы сообщения повторно ставились в очередь, просто измените ackmode
на ack_requeue_false
.
ackmode=ack_requeue_true
, больше нет такой requeue
опции, как упоминалось в других ответах