143 votes

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

Est-il possible de voir le contenu des messages RabbitMQ directement depuis la ligne de commande?

sudo rabbitmqctl list_queues liste les files d'attente.

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

1 votes

À propos de l'installation de rabbitmqadmin sur Linux stackoverflow.com/questions/36336071/…

134voto

robthewolf Points 2793

Vous devriez activer le plugin de gestion.

rabbitmq-plugins enable rabbitmq_management

Voir ici:

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

Et ici pour les détails 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= requeue=false

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

1 votes

Merci, ça marche pour moi! cela peut contribuer : par défaut, rabbitmqadmin ne peut pas être appelé de n'importe où. Il se trouve dans /var/lib/rabbitmq/mnesia/rabbit@NOMDUNODE-plugins-expand/rabb‌​itmq_management-3.1.‌​3/priv/www/cli. Il faut fixer les permissions pour cela (chmod 755 rabbitmqadmin) et peut-être le copier dans /usr/local/bin, voir rabbitmq.com/management-cli.html

0 votes

Non, vous pouvez le télécharger depuis le lien et le rendre accessible en le plaçant quelque part dans votre chemin d'accès.

20 votes

Si vous souhaitez simplement consulter le message, sans le retirer de la file d'attente, vous devez supprimer la partie requeue=false et simplement exécuter rabbitmqadmin get queue=

56voto

Eric Leschinski Points 14289

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

Insérez quelques é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        |
+-------------+----------+---------------+---------------------------------------+---------------+------------------+------------+-------------+

2 votes

Est-ce que la commande sudo python rabbitmqadmin get queue=myqueue requeue=true count=10 pour voir les messages ou pour les désenfiler depuis la fin puis les remettre au début de la file ? Y a-t-il un moyen de simplement voir les messages au lieu de les désenfiler ?

0 votes

Je suppose que get et requeue=true nous indiquent essentiellement que les messages sont délistés et affichés, puis réenfoulés (replacés à l'avant).

1 votes

Comme rabbitmqadmin se connecte à l'API basée sur le web, sudo est-il nécessaire ici?

23voto

dubek Points 2815

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

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

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

1 votes

Dubek votre outil m'a fait gagner beaucoup de temps et d'efforts, et il fonctionne à merveille, j'ai réussi à sauvegarder 54k de messages depuis une file d'attente RMQ auxquels je n'arrivais pas à accéder depuis l'interface utilisateur.

16voto

Calleniah Points 74

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

rabbitmqadmin get queue= ackmode=ack_requeue_true count=10

Voici à quoi cela ressemble sur l'interface frontale disponible sur http://localhost:15672 :

enter image description here

Si vous ne souhaitez pas que les messages soient réenfilés, il vous suffit de changer ackmode en ack_requeue_false.

3 votes

Plus un pour ackmode=ack_requeue_true, il n'y a plus d'option requeue telle que mentionnée dans d'autres réponses

11voto

Jesse Yan Points 199

Vous pouvez utiliser l'API RabbitMQ pour obtenir le nombre de messages :

/api/queues/vhost/name/get

Obtenez des messages à partir d'une file d'attente. (Il ne s'agit pas d'un HTTP GET car cela modifiera l'état de la file d'attente.) Vous devriez poster un corps ressemblant à ceci :

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

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

requeue détermine si les messages seront supprimés de la file d'attente. Si requeue est true, ils seront réenfilés - mais leur indicateur redelivered sera défini. encoding doit être soit "auto" (auquel cas la charge utile sera retournée sous forme de chaîne si elle est valide en UTF-8, et encodée en base64 sinon), 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 donné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 de livraison fiable et doivent donc être considérés comme un outil d'administrateur système plutôt que comme 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

0 votes

Juste une petite note. La clé requeue est maintenant ackmode comme documenté ici -> cdn.rawgit.com/rabbitmq/rabbitmq-management/v3.7.9/priv/www/‌​api/…

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X