Apakah mungkin untuk melihat isi pesan RabbitMQ langsung dari baris perintah?


Jawaban:


107

Anda harus mengaktifkan plugin manajemen.

rabbitmq-plugins enable rabbitmq_management

Lihat disini:

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

Dan di sini untuk spesifikasi manajemen.

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

Terakhir, setelah disiapkan, Anda harus mengikuti petunjuk di bawah ini untuk menginstal dan menggunakan alat rabbitmqadmin. Yang dapat digunakan untuk berinteraksi penuh dengan sistem. http://www.rabbitmq.com/management-cli.html

Sebagai contoh:

rabbitmqadmin get queue=<QueueName> requeue=false

akan memberi Anda pesan pertama dari antrian.


1
Terima kasih, bekerja untuk saya! ini mungkin berkontribusi: secara default rabbitmqadmin tidak dapat dipanggil dari mana pun. Terletak di /var/lib/rabbitmq/mnesia/rabbit@NODENAME-plugins-expand/rabbitmq_management-3.1.3/priv/www/cli. Seseorang perlu memperbaiki izin untuk itu (chmod 755 rabbitmqadmin) dan mungkin menyalinnya ke / usr / local / bin, lihat rabbitmq.com/management-cli.html
Scherbius.com

Tidak, Anda dapat mengunduhnya dari tautan dan membuatnya dapat diakses dengan meletakkannya di suatu tempat di jalur Anda.
robthewolf

7
Jika Anda hanya ingin melihat pesan, dan tidak mengeluarkannya dari antrian, Anda harus membuang requeue=falsesedikit dan lakukan sajarabbitmqadmin get queue=<QueueName>
jonatan

1
Anda harus menyadari bahwa pesan yang meminta menetapkan tanda pengiriman ulang, sehingga konsumen berikutnya tidak akan mendapatkan pesan yang sama
aKiRa

Dapatkah saya melihat konten pesan di antarmuka web?
gstackoverflow

40

Berikut adalah perintah yang saya gunakan untuk mendapatkan konten antrian:

RabbitMQ versi 3.1.5 di Fedora linux menggunakan https://www.rabbitmq.com/management-cli.html

Inilah pertukaran saya:

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

Ini antrian saya:

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

Masukkan beberapa item ke dalam 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 melihat pesan dalam antrian:

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
Apakah perintah sudo python rabbitmqadmin get queue=myqueue requeue=true count=10untuk melihat pesan atau untuk membatalkan pesan dari akhir dan kemudian mengembalikannya ke depan. Apakah ada cara untuk melihat pesan dan bukan menghapusnya.
Akshay Hazari

Saya kira get dan requeue = true pada dasarnya memberi tahu kita bahwa pesan di-dequeued dan ditampilkan serta diminta kembali (push_back to front).
Akshay Hazari

1
Saat rabbitmqadminterhubung ke API berbasis web, apakah sudo diperlukan di sini?
Richlv

Mengaparequeue=True
stephen

20

Saya menulis rabbitmq-dump-queue yang memungkinkan membuang pesan dari antrian RabbitMQ ke file lokal dan memasukkan pesan dalam urutan aslinya.

Contoh penggunaan (untuk membuang 50 pesan pertama dari antrian incoming_1):

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

10

Anda dapat menggunakan RabbitMQ API untuk menghitung atau mengirim pesan:

/api/queues/vhost/name/get

Dapatkan pesan dari antrian. (Ini bukan HTTP GET karena akan mengubah status antrian.) Anda harus memposting isi seperti:

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

count mengontrol jumlah maksimum pesan untuk diterima. Anda mungkin mendapatkan lebih sedikit pesan dari ini jika antrian tidak dapat segera menyediakannya.

requeue menentukan apakah pesan akan dihapus dari antrian. Jika requeue benar, mereka akan dikirim ulang - tetapi flag yang dikirim ulang akan disetel. encoding harus berupa "auto" (dalam hal ini payload akan dikembalikan sebagai string jika UTF-8 valid, dan base64 dienkode sebaliknya), atau "base64" (dalam hal ini payload akan selalu dienkode base64). Jika truncate ada, itu akan memotong payload pesan jika lebih besar dari ukuran yang diberikan (dalam byte). truncate adalah opsional; semua kunci lainnya wajib.

Harap diperhatikan bahwa jalur publikasikan / dapatkan di API HTTP dimaksudkan untuk memasukkan pesan uji, diagnostik, dll. - jalur tersebut tidak menerapkan pengiriman yang dapat diandalkan dan karenanya harus diperlakukan sebagai alat sysadmin daripada API umum untuk perpesanan.

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



0

Jika Anda ingin beberapa pesan dari antrian, katakanlah 10 pesan, perintah yang digunakan adalah:

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

Jika Anda tidak ingin pesan dibuat ulang, cukup ubah ackmodeke ack_requeue_false.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.