เป็นไปได้ไหมที่จะดูเนื้อหาข้อความ RabbitMQ โดยตรงจากบรรทัดคำสั่ง


102

เป็นไปได้ไหมที่จะดูเนื้อหาข้อความ RabbitMQ โดยตรงจากบรรทัดคำสั่ง

sudo rabbitmqctl list_queues แสดงรายการคิว

มีคำสั่งเช่นไรsudo rabbitmqctl list_queue_messages <queue_name>?


1
เกี่ยวกับการติดตั้ง rabbitmqadmin บน linux stackoverflow.com/questions/36336071/…
Alexey Shrub

คำตอบ:


107

คุณควรเปิดใช้งานปลั๊กอินการจัดการ

rabbitmq-plugins enable rabbitmq_management

ดูที่นี่:

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

และสำหรับข้อมูลเฉพาะของการจัดการ

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

ในที่สุดเมื่อตั้งค่าแล้วคุณจะต้องทำตามคำแนะนำด้านล่างเพื่อติดตั้งและใช้เครื่องมือ rabbitmqadmin ซึ่งสามารถใช้เพื่อโต้ตอบกับระบบได้อย่างเต็มที่. http://www.rabbitmq.com/management-cli.html

ตัวอย่างเช่น:

rabbitmqadmin get queue=<QueueName> requeue=false

จะให้ข้อความแรกออกจากคิว


1
ขอบคุณทำงานให้ฉัน! สิ่งนี้อาจมีส่วนช่วย: โดยค่าเริ่มต้น rabbitmqadmin ไม่สามารถเรียกได้จากทุกที่ อยู่ใน /var/lib/rabbitmq/mnesia/rabbit@NODENAME-plugins-expand/rabbitmq_management-3.1.3/priv/www/cli จำเป็นต้องแก้ไขสิทธิ์สำหรับมัน (chmod 755 rabbitmqadmin) และอาจคัดลอกไปที่ / usr / local / bin ดูrabbitmq.com/management-cli.html
Scherbius.com

ไม่คุณสามารถดาวน์โหลดได้จากลิงก์และทำให้เข้าถึงได้โดยวางไว้ที่ใดที่หนึ่งในเส้นทางของคุณ
robthewolf

7
หากคุณต้องการดูข้อความเท่านั้นและไม่นำออกจากคิวคุณควรวางrequeue=falseบิตและทำrabbitmqadmin get queue=<QueueName>
jonatan

1
คุณควรทราบว่าข้อความที่ร้องขอตั้งค่าสถานะการส่งซ้ำดังนั้นผู้บริโภคที่ตามมาจะไม่ได้รับข้อความที่เหมือนกัน
aKiRa

ฉันสามารถดูเนื้อหาข้อความในเว็บอินเทอร์เฟซได้หรือไม่
gstackoverflow

40

นี่คือคำสั่งที่ฉันใช้เพื่อรับเนื้อหาของคิว:

RabbitMQ เวอร์ชัน 3.1.5 บน Fedora linux โดยใช้https://www.rabbitmq.com/management-cli.html

นี่คือการแลกเปลี่ยนของฉัน:

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

นี่คือคิวของฉัน:

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

ยัดไอเทมบางส่วนลงใน 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 เห็นข้อความในคิว:

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
เป็นคำสั่งsudo python rabbitmqadmin get queue=myqueue requeue=true count=10เพื่อดูข้อความหรือเพื่อยกเลิกการจัดคิวข้อความจากส่วนท้ายแล้วส่งคำขอไปที่ด้านหน้า มีวิธีใดบ้างที่จะดูข้อความแทนการเลิกจ้าง
Akshay Hazari

ฉันคิดว่า get และ requeue = true โดยพื้นฐานแล้วจะบอกเราว่าข้อความนั้นถูกยกเลิกการจัดคิวและแสดงและร้องขอ (push_back ไปข้างหน้า)
Akshay Hazari

1
เมื่อrabbitmqadminเชื่อมต่อกับ API บนเว็บจำเป็นต้องใช้ sudo ที่นี่หรือไม่
Richlv

ทำไมrequeue=True
สตีเฟ่น

20

ฉันเขียนrabbitmq-dump-queซึ่งอนุญาตให้ทิ้งข้อความจากคิว RabbitMQ ไปยังไฟล์ในเครื่องและขอข้อความตามลำดับเดิม

ตัวอย่างการใช้งาน (เพื่อถ่ายโอนข้อมูล 50 ข้อความแรกของคิวincoming_1):

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

10

คุณสามารถใช้ RabbitMQ API เพื่อรับจำนวนหรือข้อความ:

/api/queues/vhost/name/get

รับข้อความจากคิว (นี่ไม่ใช่ HTTP GET เนื่องจากจะเปลี่ยนสถานะของคิว) คุณควรโพสต์เนื้อหาที่มีลักษณะดังนี้:

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

การนับควบคุมจำนวนข้อความสูงสุดที่จะได้รับ คุณอาจได้รับข้อความน้อยกว่านี้หากคิวไม่สามารถให้ได้ทันที

Requeue กำหนดว่าข้อความจะถูกลบออกจากคิวหรือไม่ หากคำขอเป็นจริงพวกเขาจะถูกร้องขอ แต่จะมีการตั้งค่าสถานะที่ส่งซ้ำ การเข้ารหัสต้องเป็นแบบ "อัตโนมัติ" (ในกรณีนี้เพย์โหลดจะถูกส่งกลับเป็นสตริงหากเป็น UTF-8 ที่ถูกต้องและเข้ารหัส base64 เป็นอย่างอื่น) หรือ "base64" (ซึ่งในกรณีนี้เพย์โหลดจะเข้ารหัส base64 เสมอ) หากมีการตัดทอนจะเป็นการตัดส่วนข้อมูลข้อความหากมีขนาดใหญ่กว่าขนาดที่กำหนด (เป็นไบต์) ตัดทอนเป็นทางเลือก; คีย์อื่น ๆ ทั้งหมดมีผลบังคับใช้

โปรดทราบว่าเส้นทางการเผยแพร่ / รับใน HTTP API มีไว้สำหรับการฉีดข้อความทดสอบการวินิจฉัยและอื่น ๆ - พวกเขาไม่ได้ใช้การจัดส่งที่เชื่อถือได้ดังนั้นจึงควรถือว่าเป็นเครื่องมือของผู้ดูแลระบบแทนที่จะเป็น API ทั่วไปสำหรับการส่งข้อความ

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


4

ช้าไปหน่อย แต่ใช่ rabbitmq มี build in tracer ที่ช่วยให้คุณเห็นข้อความที่เข้ามาในบันทึก เมื่อเปิดใช้งานคุณสามารถtail -f /var/tmp/rabbitmq-tracing/.log(บน Mac) เพื่อดูข้อความได้

รายละเอียดรายละเอียดอยู่ที่นี่http://www.mikeobrien.net/blog/tracing-rabbitmq-messages


3
ลิงก์เสีย มิเรอร์: web.archive.org/web/20160319074032/http://www.mikeobrien.net/… . หน้าข้อผิดพลาดที่กำหนดเองที่ดี BTW :)
xtreak

1

หากคุณต้องการหลายข้อความจากคิวให้พูด 10 ข้อความคำสั่งที่ใช้คือ:

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

หากคุณไม่ต้องการให้ข้อความ requeued เพียงการเปลี่ยนแปลงไปackmodeack_requeue_false


บวกหนึ่งสำหรับackmode=ack_requeue_trueไม่มีrequeueตัวเลือกดังที่กล่าวไว้ในคำตอบอื่น ๆ
Nick Roz
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.