Est-il possible d'afficher le contenu des messages RabbitMQ directement à partir de la ligne de commande?

101

Est-il possible d'afficher le contenu des messages RabbitMQ directement à partir de la ligne de commande?

sudo rabbitmqctl list_queues répertorie les files d'attente.

Y a-t-il une commande comme sudo rabbitmqctl list_queue_messages <queue_name>?

Cisailles
la source
1
À propos de l'installation de rabbitmqadmin sur linux stackoverflow.com/questions/36336071/…
Alexey Shrub

Réponses:

107

Vous devez activer le plugin de gestion.

rabbitmq-plugins enable rabbitmq_management

Vois ici:

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

Et ici pour les spécificités de la gestion.

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

Enfin, une fois configuré, vous devrez suivre les instructions ci-dessous pour installer et utiliser l'outil rabbitmqadmin. Qui peut être utilisé pour interagir pleinement avec le système. http://www.rabbitmq.com/management-cli.html

Par exemple:

rabbitmqadmin get queue=<QueueName> requeue=false

vous donnera le premier message de la file d'attente.

Robthewolf
la source
1
Merci, ça marche pour moi! cela peut contribuer: par défaut, rabbitmqadmin ne peut pas être appelé de partout. Il est situé dans /var/lib/rabbitmq/mnesia/rabbit@NODENAME-plugins-expand/rabbitmq_management-3.1.3/priv/www/cli. Il faut corriger les autorisations pour cela (chmod 755 rabbitmqadmin) et peut-être le copier dans / usr / local / bin, voir rabbitmq.com/management-cli.html
Scherbius.com
Non, vous pouvez le télécharger à partir du lien et le rendre accessible en le plaçant quelque part sur votre chemin.
robthewolf
7
Si vous voulez seulement afficher le message et ne pas le sortir de la file d'attente, vous devez laisser tomber le requeue=falsebit et le fairerabbitmqadmin get queue=<QueueName>
jonatan
1
Vous devez être conscient que les messages de mise en file d'attente définissent l'indicateur de nouvelle livraison, de sorte que les consommateurs suivants ne recevront pas un message identique
aKiRa
Puis-je voir le contenu des messages dans l'interface Web?
gstackoverflow
40

Voici les commandes que j'utilise pour obtenir le contenu de la file d'attente:

RabbitMQ version 3.1.5 sur Fedora Linux en utilisant https://www.rabbitmq.com/management-cli.html

Voici mes échanges:

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

Voici ma file d'attente:

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

Cramsez certains éléments dans ma file d'attente:

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 voit les messages dans la file d'attente:

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
la source
2
Est la commande sudo python rabbitmqadmin get queue=myqueue requeue=true count=10pour voir les messages ou pour retirer les messages de la fin, puis les remettre en file d'attente vers l'avant. Existe-t-il un moyen de simplement voir les messages au lieu de les extraire.
Akshay Hazari
Je suppose que get et requeue = true nous indique essentiellement que les messages sont retirés de la file d'attente et affichés et mis en file d'attente (push_back au premier plan).
Akshay Hazari
1
Lorsque vous vous rabbitmqadminconnectez à l'API Web, sudo est-il nécessaire ici?
Richlv
Pourquoirequeue=True
Stephen
20

J'ai écrit rabbitmq-dump-queue qui permet de vider les messages d'une file d'attente RabbitMQ vers des fichiers locaux et de remettre les messages dans leur ordre d'origine.

Exemple d'utilisation (pour vider les 50 premiers messages de la file d'attente incoming_1):

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

vous pouvez utiliser l'API RabbitMQ pour obtenir le nombre ou les messages:

/api/queues/vhost/name/get

Récupérez les messages d'une file d'attente. (Ce n'est pas un HTTP GET car cela modifiera l'état de la file d'attente.) Vous devriez publier un corps ressemblant à:

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

count contrôle le nombre maximum de messages à obtenir. Vous pouvez recevoir moins de messages que cela si la file d'attente ne peut pas les fournir immédiatement.

la file d'attente détermine si les messages seront supprimés de la file d'attente. Si la file d'attente est vraie, ils seront mis en file d'attente - mais leur indicateur de redélivrance sera défini. l'encodage doit être soit "auto" (auquel cas la charge utile sera renvoyée sous forme de chaîne si elle est valide UTF-8, et codée en base64 autrement), soit "base64" (auquel cas la charge utile sera toujours encodée en base64). Si truncate est présent, il tronquera la charge utile du message si elle est plus grande que la taille indiquée (en octets). truncate est facultatif; toutes les autres clés sont obligatoires.

Veuillez noter que les chemins de publication / récupération dans l'API HTTP sont destinés à injecter des messages de test, des diagnostics, etc. - ils n'implémentent pas une livraison fiable et doivent donc être traités comme un outil d'administrateur système plutôt qu'une API générale pour la messagerie.

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

Jesse Yan
la source
0

Si vous voulez plusieurs messages d'une file d'attente, disons 10 messages, la commande à utiliser est:

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

Si vous ne voulez pas que les messages soient mis en file d'attente, changez simplement ackmodeen ack_requeue_false.

Calleniah
la source