RabbitMQ mesaj içeriğini doğrudan komut satırından görüntülemek mümkün müdür?


Yanıtlar:


107

Yönetim eklentisini etkinleştirmelisiniz.

rabbitmq-plugins enable rabbitmq_management

Buraya bakın:

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

Ve burada yönetimin ayrıntıları için.

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

Son olarak, bir kez kurulduktan sonra, rabbitmqadmin aracını kurmak ve kullanmak için aşağıdaki talimatları izlemeniz gerekecektir. Sistemle tam olarak etkileşim kurmak için kullanılabilir. http://www.rabbitmq.com/management-cli.html

Örneğin:

rabbitmqadmin get queue=<QueueName> requeue=false

size kuyruktaki ilk mesajı verecektir.


1
Teşekkürler, benim için çalışıyor! bu katkıda bulunabilir: varsayılan olarak rabbitmqadmin her yerden çağrılamaz. /Var/lib/rabbitmq/mnesia/rabbit@NODENAME-plugins-expand/rabbitmq_management-3.1.3/priv/www/cli adresinde bulunur. Bunun için izinlerin düzeltilmesi gerekiyor (chmod 755 rabbitmqadmin) ve belki / usr / local / bin'e kopyalayın
Scherbius.com

Hayır, onu bağlantıdan indirebilir ve yolunuzun herhangi bir yerine koyarak erişilebilir hale getirebilirsiniz.
robthewolf

7
Sadece mesajı görüntülemek istiyor ve onu kuyruktan çıkarmak istemiyorsanız, requeue=falsebiraz bırakıp yapmalısınızrabbitmqadmin get queue=<QueueName>
jonatan

1
Yeniden sıraya koyma mesajlarının yeniden teslim bayrağını ayarladığını bilmelisiniz, böylece sonraki tüketiciler aynı mesajı
almayacak

Mesaj içeriğini web arayüzünde görebilir miyim?
gstackoverflow

40

Sıranın içeriğini almak için kullandığım komutlar:

Kullanarak Fedora Linux üzerinde RabbitMQ sürüm 3.1.5 https://www.rabbitmq.com/management-cli.html

Borsalarım:

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

İşte sıram:

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'ya bazı öğeleri sıkıştırın:

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 sıradaki mesajları görüyor:

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
Komut mı sudo python rabbitmqadmin get queue=myqueue requeue=true count=10mesajları görmek için ya da sonuna gelen iletileri sıradan çıkarma ve sonra cepheye bunları yeniden kuyruklandırabilir için. Mesajları sıralı hale getirmek yerine sadece görmenin bir yolu var mı?
Akshay Hazari

Sanırım get ve requeue = true, bize mesajların kuyruğundan çıkarıldığını ve görüntülendiğini ve yeniden sıraya alındığını (itilen_ geri öne doğru) söylüyor.
Akshay Hazari

1
As rabbitmqadminweb tabanlı API bağlanır sudo burada gerekli?
Richlv

Nedenrequeue=True
Stephen

20

Bir RabbitMQ kuyruğundaki mesajların yerel dosyalara dökülmesine ve mesajların orijinal sıralarına göre yeniden sıralanmasına izin veren rabbitmq-dump-queue yazdım .

Örnek kullanım (sıranın ilk 50 mesajını dökmek için incoming_1):

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

10

sayım veya mesaj almak için RabbitMQ API'yi kullanabilirsiniz:

/api/queues/vhost/name/get

Bir kuyruktan mesaj alın. (Kuyruğun durumunu değiştireceğinden bu bir HTTP GET değildir.) Şuna benzer bir gövde göndermelisiniz:

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

count, alınacak maksimum ileti sayısını kontrol eder. Kuyruk bunları hemen sağlayamazsa bundan daha az mesaj alabilirsiniz.

requeue, mesajların kuyruktan kaldırılıp kaldırılmayacağını belirler. Yeniden kuyruğa alma doğruysa, yeniden sıralanacaklar - ancak yeniden gönderilen bayrakları ayarlanacaktır. kodlama ya "otomatik" olmalıdır (bu durumda yük, UTF-8 geçerliyse ve base64 kodlanmışsa bir dize olarak döndürülür) veya "base64" (bu durumda yük her zaman base64 olarak kodlanır). Kesik varsa, verilen boyuttan (bayt cinsinden) daha büyükse ileti yükünü keser. kesme isteğe bağlıdır; diğer tüm anahtarlar zorunludur.

Lütfen, HTTP API'deki yayınlama / alma yollarının test mesajlarını, teşhisleri vb. Enjekte etmek için tasarlandığını - güvenilir teslimatı gerçekleştirmediklerini ve bu nedenle mesajlaşma için genel bir API'den ziyade bir sistem yöneticisi aracı olarak görülmeleri gerektiğini unutmayın.

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



1

Bir kuyruktan birden fazla mesaj istiyorsanız, örneğin 10 mesaj, kullanılacak komut şudur:

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

Eğer istemiyorsan mesajlar, sadece değişimi requeued ackmodeiçin ack_requeue_false.


artı bir için ackmode=ack_requeue_true, requeuediğer cevaplarda belirtildiği gibi böyle bir seçenek yok
Nick Roz
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.