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

101

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

sudo rabbitmqctl list_queues daftar antrian.

Apakah ada perintah seperti itu sudo rabbitmqctl list_queue_messages <queue_name>?

Gunting
sumber
1
Tentang menginstal rabbitmqadmin di linux stackoverflow.com/questions/36336071/…
Alexey Shrub

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.

robthewolf
sumber
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        |
+-------------+----------+---------------+---------------------------------------+---------------+------------------+------------+-------------+
Eric Leschinski
sumber
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:[email protected]:5672/" -queue=incoming_1 -max-messages=50 -output-dir=/tmp
dubek
sumber
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

Jesse Yan
sumber
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.

Calleniah
sumber