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>
?
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>
?
Antworten:
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.
requeue=false
rabbitmqadmin get queue=<QueueName>
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 |
+-------------+----------+---------------+---------------------------------------+---------------+------------------+------------+-------------+
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?
rabbitmqadmin
Verbindung zum Web-basierten API, ist sudo hier benötigt?
requeue=True
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:password@rabbitmq.example.com:5672/" -queue=incoming_1 -max-messages=50 -output-dir=/tmp
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
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/.log
die Nachrichten nur (auf dem Mac) ansehen.
Die detaillierte Beschreibung finden Sie hier http://www.mikeobrien.net/blog/tracing-rabbitmq-messages
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 ackmode
zu ack_requeue_false
.