È possibile visualizzare il contenuto del messaggio RabbitMQ direttamente dalla riga di comando?


Risposte:


107

Dovresti abilitare il plugin di gestione.

rabbitmq-plugins enable rabbitmq_management

Vedere qui:

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

E qui per le specifiche della gestione.

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

Infine, una volta impostato, dovrai seguire le istruzioni seguenti per installare e utilizzare lo strumento rabbitmqadmin. Che può essere utilizzato per interagire completamente con il sistema. http://www.rabbitmq.com/management-cli.html

Per esempio:

rabbitmqadmin get queue=<QueueName> requeue=false

ti darà il primo messaggio fuori dalla coda.


1
Grazie, funziona per me! questo può contribuire: per impostazione predefinita rabbitmqadmin non può essere chiamato ovunque. Si trova in /var/lib/rabbitmq/mnesia/rabbit@NODENAME-plugins-expand/rabbitmq_management-3.1.3/priv/www/cli. È necessario correggere le autorizzazioni per esso (chmod 755 rabbitmqadmin) e magari copiarlo in / usr / local / bin, vedere rabbitmq.com/management-cli.html
Scherbius.com

No, puoi scaricarlo dal link e renderlo accessibile inserendolo da qualche parte nel tuo percorso.
robthewolf

7
Se vuoi solo visualizzare il messaggio e non toglierlo dalla coda, dovresti lasciare il requeue=falsebit e farlorabbitmqadmin get queue=<QueueName>
jonatan

1
Tieni presente che i messaggi di riaccodamento impostano il flag di riconsegna, quindi i consumatori successivi non riceveranno un messaggio identico
aKiRa

Posso vedere il contenuto dei messaggi nell'interfaccia web?
gstackoverflow

40

Ecco i comandi che utilizzo per ottenere il contenuto della coda:

RabbitMQ versione 3.1.5 su Fedora linux utilizzando https://www.rabbitmq.com/management-cli.html

Ecco i miei scambi:

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

Ecco la mia coda:

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

Riempi alcuni oggetti in 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 vede i messaggi in coda:

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
È il comando sudo python rabbitmqadmin get queue=myqueue requeue=true count=10per vedere i messaggi o per rimuovere dalla coda i messaggi dalla fine e poi riaccodarli in primo piano. C'è un modo per vedere solo i messaggi invece di rimuoverli.
Akshay Hazari

Suppongo che get e requeue = true essenzialmente ci dica che i messaggi vengono rimossi dalla coda, visualizzati e riaccodati (pushed_back in primo piano).
Akshay Hazari

1
Quando si rabbitmqadminconnette all'API basata sul Web, è necessario sudo qui?
Richlv

Perchérequeue=True
stephen

20

Ho scritto rabbitmq-dump-queue che consente di scaricare i messaggi da una coda RabbitMQ a file locali e di riaccodare i messaggi nell'ordine originale.

Esempio di utilizzo (per eseguire il dump dei primi 50 messaggi della coda incoming_1):

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

10

puoi utilizzare RabbitMQ API per ottenere conteggio o messaggi:

/api/queues/vhost/name/get

Ricevi messaggi da una coda. (Questo non è un HTTP GET in quanto altererà lo stato della coda.) Dovresti pubblicare un corpo simile a:

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

count controlla il numero massimo di messaggi da ricevere. Potresti ricevere meno messaggi di questo se la coda non è in grado di fornirli immediatamente.

requeue determina se i messaggi verranno rimossi dalla coda. Se la riaccodamento è vera, verranno riaccodati, ma verrà impostato il contrassegno di riconsegna. la codifica deve essere "auto" (nel qual caso il payload verrà restituito come una stringa se è valido UTF-8 e codificato in base64 in altro modo) o "base64" (nel qual caso il payload sarà sempre codificato in base64). Se è presente truncate, troncerà il payload del messaggio se è maggiore della dimensione fornita (in byte). truncate è facoltativo; tutte le altre chiavi sono obbligatorie.

Tieni presente che i percorsi di pubblicazione / acquisizione nell'API HTTP sono destinati all'iniezione di messaggi di prova, diagnostica, ecc. - Non implementano una consegna affidabile e quindi dovrebbero essere trattati come uno strumento di amministratore di sistema piuttosto che un'API generale per la messaggistica.

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


4

un po 'tardi per questo, ma sì, rabbitmq ha una build in tracer che ti permette di vedere i messaggi in arrivo in un log. Quando abilitato, puoi semplicemente tail -f /var/tmp/rabbitmq-tracing/.log(su Mac) guardare i messaggi.

la descrizione dettagliata è qui http://www.mikeobrien.net/blog/tracing-rabbitmq-messages


3
Il collegamento è interrotto. Specchio: web.archive.org/web/20160319074032/http://www.mikeobrien.net/… . Bella pagina di errore personalizzata BTW :)
xtreak

0

Se vuoi più messaggi da una coda, diciamo 10 messaggi, il comando da usare è:

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

Se non desideri che i messaggi vengano riaccodati, passa ackmodea ack_requeue_false.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.