Ist es möglich, den Inhalt von RabbitMQ-Nachrichten direkt über die Befehlszeile anzuzeigen?

101

Ist es möglich, den Inhalt von RabbitMQ-Nachrichten direkt über die Befehlszeile anzuzeigen?

sudo rabbitmqctl list_queues listet die Warteschlangen auf.

Gibt es einen Befehl wie sudo rabbitmqctl list_queue_messages <queue_name>?

Schere
quelle
1
Über die Installation von rabbitmqadmin unter Linux stackoverflow.com/questions/36336071/…
Alexey Shrub

Antworten:

105

Sie sollten das Management-Plugin aktivieren.

rabbitmq-plugins enable rabbitmq_management

Siehe hier:

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

Und hier für die Besonderheiten des Managements.

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

Nach dem Einrichten müssen Sie die folgenden Anweisungen befolgen, um das rabbitmqadmin-Tool zu installieren und zu verwenden. Welches verwendet werden kann, um vollständig mit dem System zu interagieren. http://www.rabbitmq.com/management-cli.html

Beispielsweise:

rabbitmqadmin get queue=<QueueName> requeue=false

gibt Ihnen die erste Nachricht aus der Warteschlange.

Robthewolf
quelle
1
Danke, funktioniert für mich! Dies kann dazu beitragen: Standardmäßig kann rabbitmqadmin nicht von überall aufgerufen werden. Es befindet sich in /var/lib/rabbitmq/mnesia/rabbit@NODENAME-plugins-expand/rabbitmq_management-3.1.3/priv/www/cli. Man muss die Berechtigungen dafür festlegen (chmod 755 rabbitmqadmin) und es vielleicht nach / usr / local / bin kopieren
Scherbius.com
Nein, Sie können es über den Link herunterladen und zugänglich machen, indem Sie es irgendwo in Ihren Pfad einfügen.
Robthewolf
7
Wenn Sie die Nachricht nur anzeigen und nicht aus der Warteschlange requeue=falserabbitmqadmin get queue=<QueueName>
entfernen möchten
1
Sie sollten sich bewusst sein, dass die anfordernden Nachrichten das Flag für die erneute Zustellung setzen, damit nachfolgende Verbraucher keine identische Nachricht erhalten
aKiRa
Kann ich Nachrichteninhalte in der Weboberfläche sehen?
Gstackoverflow
40

Hier sind die Befehle, mit denen ich den Inhalt der Warteschlange abrufe:

RabbitMQ Version 3.1.5 unter Fedora Linux unter https://www.rabbitmq.com/management-cli.html

Hier sind meine Austausche:

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

Hier ist meine Warteschlange:

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

Cram einige Gegenstände 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 sieht Nachrichten in der Warteschlange:

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
quelle
2
Ist der Befehl sudo python rabbitmqadmin get queue=myqueue requeue=true count=10, Nachrichten anzuzeigen oder die Nachrichten vom Ende zu entfernen und sie dann nach vorne zu fordern. Gibt es eine Möglichkeit, die Nachrichten nur zu sehen, anstatt sie zu entfernen?
Akshay Hazari
Ich nehme an, get and Requeue = true sagt uns im Wesentlichen, dass die Nachrichten aus der Warteschlange entfernt und angezeigt und angefordert werden (push_back to front).
Akshay Hazari
1
Als eine rabbitmqadminVerbindung zum Web-basierten API, ist sudo hier benötigt?
Richlv
Warum tutrequeue=True
Stephen
20

Ich habe die rabbitmq-dump-Warteschlange geschrieben , mit der Nachrichten aus einer RabbitMQ-Warteschlange in lokale Dateien geschrieben und die Nachrichten in ihrer ursprünglichen Reihenfolge angefordert werden können.

Anwendungsbeispiel (um die ersten 50 Nachrichten der Warteschlange zu sichern incoming_1):

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

Sie können die RabbitMQ-API verwenden, um die Anzahl oder die Nachrichten abzurufen:

/api/queues/vhost/name/get

Nachrichten aus einer Warteschlange abrufen. (Dies ist kein HTTP-GET, da dies den Status der Warteschlange ändert.) Sie sollten einen Text veröffentlichen, der wie folgt aussieht:

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

count steuert die maximale Anzahl der abzurufenden Nachrichten. Möglicherweise erhalten Sie weniger Nachrichten, wenn die Warteschlange sie nicht sofort bereitstellen kann.

Requeue bestimmt, ob die Nachrichten aus der Warteschlange entfernt werden. Wenn die Anforderung wahr ist, werden sie erneut angefordert - aber ihr erneut zugestelltes Flag wird gesetzt. Die Codierung muss entweder "auto" (in diesem Fall wird die Nutzlast als Zeichenfolge zurückgegeben, wenn sie in UTF-8 gültig ist, und base64 anderweitig codiert) oder "base64" (in diesem Fall wird die Nutzlast immer base64-codiert) sein. Wenn "Abschneiden" vorhanden ist, wird die Nachrichtennutzlast abgeschnitten, wenn sie größer als die angegebene Größe (in Byte) ist. Abschneiden ist optional; Alle anderen Schlüssel sind obligatorisch.

Bitte beachten Sie, dass die Publish / Get-Pfade in der HTTP-API zum Einfügen von Testnachrichten, Diagnosen usw. vorgesehen sind. Sie implementieren keine zuverlässige Zustellung und sollten daher eher als Systemadministrator-Tool als als allgemeine API für Messaging behandelt werden.

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

Jesse Yan
quelle
4

ein bisschen spät dazu, aber ja, rabbitmq hat einen eingebauten Tracer, mit dem Sie die eingehenden Nachrichten in einem Protokoll sehen können. Wenn aktiviert, können Sie tail -f /var/tmp/rabbitmq-tracing/.logdie Nachrichten nur (auf dem Mac) ansehen.

Die detaillierte Beschreibung finden Sie hier http://www.mikeobrien.net/blog/tracing-rabbitmq-messages

domi
quelle
3
Link ist unterbrochen. Spiegel: web.archive.org/web/20160319074032/http://www.mikeobrien.net/… . Schöne benutzerdefinierte Fehlerseite BTW :)
xtreak
0

Wenn Sie mehrere Nachrichten aus einer Warteschlange möchten, z. B. 10 Nachrichten, lautet der zu verwendende Befehl:

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

Wenn Sie nicht möchten, dass die Nachrichten angefordert werden, wechseln Sie einfach ackmodezu ack_requeue_false.

Calleniah
quelle