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>
?
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>
?
Réponses:
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.
requeue=false
bit et le fairerabbitmqadmin get queue=<QueueName>
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 |
+-------------+----------+---------------+---------------------------------------+---------------+------------------+------------+-------------+
sudo python rabbitmqadmin get queue=myqueue requeue=true count=10
pour 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.
rabbitmqadmin
connectez à l'API Web, sudo est-il nécessaire ici?
requeue=True
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:password@rabbitmq.example.com:5672/" -queue=incoming_1 -max-messages=50 -output-dir=/tmp
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
un peu tard, mais oui rabbitmq a un traceur intégré qui vous permet de voir les messages entrants dans un journal. Lorsqu'elle est activée, vous pouvez simplement tail -f /var/tmp/rabbitmq-tracing/.log
(sur mac) regarder les messages.
la description détaillée est ici http://www.mikeobrien.net/blog/tracing-rabbitmq-messages
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 ackmode
en ack_requeue_false
.