¿Es posible ver el contenido de los mensajes de RabbitMQ directamente desde la línea de comandos?

Respuestas:

105

Debe habilitar el complemento de administración.

rabbitmq-plugins enable rabbitmq_management

Mira aquí:

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

Y aquí para los detalles de la gestión.

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

Finalmente, una vez configurado, deberá seguir las instrucciones a continuación para instalar y usar la herramienta rabbitmqadmin. Que se puede utilizar para interactuar completamente con el sistema. http://www.rabbitmq.com/management-cli.html

Por ejemplo:

rabbitmqadmin get queue=<QueueName> requeue=false

le dará el primer mensaje de la cola.

robthewolf
fuente
1
Gracias, funciona para mi! esto puede contribuir: por defecto, no se puede llamar a rabbitmqadmin desde cualquier lugar. Está ubicado en /var/lib/rabbitmq/mnesia/rabbit@NODENAME-plugins-expand/rabbitmq_management-3.1.3/priv/www/cli. Es necesario arreglar los permisos para él (chmod 755 rabbitmqadmin) y tal vez copiarlo en / usr / local / bin, consulte rabbitmq.com/management-cli.html
Scherbius.com
No, puede descargarlo desde el enlace y hacerlo accesible colocándolo en algún lugar en su camino.
robthewolf
7
Si solo desea ver el mensaje y no sacarlo de la cola, debe soltar el requeue=falsebit y simplemente hacerlorabbitmqadmin get queue=<QueueName>
jonatan
1
Debe tener en cuenta que los mensajes de puesta en cola establecen el indicador de reenvío, por lo que los consumidores posteriores no recibirán un mensaje idéntico
aKiRa
¿Puedo ver el contenido de los mensajes en la interfaz web?
gstackoverflow
40

Estos son los comandos que utilizo para obtener el contenido de la cola:

RabbitMQ versión 3.1.5 en Fedora Linux usando https://www.rabbitmq.com/management-cli.html

Aquí están mis intercambios:

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

Aquí está mi cola:

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 |
+-------+----------+-------------+-----------+---------+------------------------+---------------------+--------+----------+----------------+-------------------------+---------------------+--------+---------+

Meta algunos elementos en 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 ve mensajes en cola:

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        |
+-------------+----------+---------------+---------------------------------------+---------------+------------------+------------+-------------+
Eric Leschinski
fuente
2
Es el comando sudo python rabbitmqadmin get queue=myqueue requeue=true count=10para ver los mensajes o quitarlos de la cola del final y luego ponerlos al frente. ¿Hay alguna manera de ver los mensajes en lugar de eliminarlos?
Akshay Hazari
Supongo que get y requeue = true esencialmente nos dice que los mensajes se retiran de la cola y se muestran y se ponen en cola (empujados_back al frente).
Akshay Hazari
1
Como se rabbitmqadminconecta a la API basada en web, ¿se necesita sudo aquí?
Richlv
¿Por quérequeue=True
Stephen
20

Escribí rabbitmq-dump-queue que permite volcar mensajes de una cola de RabbitMQ a archivos locales y volver a colocar los mensajes en su orden original.

Ejemplo de uso (para volcar los primeros 50 mensajes de la cola incoming_1):

rabbitmq-dump-queue -url="amqp://user:[email protected]:5672/" -queue=incoming_1 -max-messages=50 -output-dir=/tmp
dubek
fuente
10

puede usar la API de RabbitMQ para obtener recuentos o mensajes:

/api/queues/vhost/name/get

Recibe mensajes de una cola. (Esto no es un HTTP GET ya que alterará el estado de la cola). Debes publicar un cuerpo que se parezca a:

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

count controla el número máximo de mensajes a recibir. Puede recibir menos mensajes que este si la cola no puede proporcionarlos de inmediato.

requeue determina si los mensajes se eliminarán de la cola. Si la cola es verdadera, se pondrán en cola, pero se establecerá su marca de reenvío. la codificación debe ser "automática" (en cuyo caso la carga útil se devolverá como una cadena si es UTF-8 válido, y codificada en base64 en caso contrario) o "base64" (en cuyo caso la carga útil siempre estará codificada en base64). Si truncar está presente, truncará la carga útil del mensaje si es mayor que el tamaño dado (en bytes). truncar es opcional; todas las demás claves son obligatorias.

Tenga en cuenta que las rutas de publicación / obtención en la API HTTP están destinadas a inyectar mensajes de prueba, diagnósticos, etc., no implementan una entrega confiable y, por lo tanto, deben tratarse como una herramienta de administrador de sistemas en lugar de una API general para mensajería.

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

Jesse Yan
fuente
4

un poco tarde para esto, pero sí, rabbitmq tiene un trazador incorporado que le permite ver los mensajes entrantes en un registro. Cuando está habilitado, puede simplemente tail -f /var/tmp/rabbitmq-tracing/.log(en mac) ver los mensajes.

la descripción detallada está aquí http://www.mikeobrien.net/blog/tracing-rabbitmq-messages

domi
fuente
3
El enlace está roto. Espejo: web.archive.org/web/20160319074032/http://www.mikeobrien.net/… . Bonita página de error personalizada BTW :)
xtreak
0

Si desea varios mensajes de una cola, digamos 10 mensajes, el comando a utilizar es:

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

Si no desea que los mensajes se pongan en cola, simplemente cambie ackmodea ack_requeue_false.

Calleniah
fuente