Czy można wyświetlić zawartość wiadomości RabbitMQ bezpośrednio z wiersza poleceń?

101

Czy można wyświetlić zawartość wiadomości RabbitMQ bezpośrednio z wiersza poleceń?

sudo rabbitmqctl list_queues wymienia kolejki.

Czy jest jakieś polecenie sudo rabbitmqctl list_queue_messages <queue_name>?

Nożyce
źródło
1
O instalacji rabbitmqadmin na linux stackoverflow.com/questions/36336071/ ...
Alexey Shrub

Odpowiedzi:

107

Powinieneś włączyć wtyczkę zarządzającą.

rabbitmq-plugins enable rabbitmq_management

Spójrz tutaj:

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

A tu dla specyfiki zarządzania.

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

Na koniec po skonfigurowaniu będziesz musiał postępować zgodnie z poniższymi instrukcjami, aby zainstalować i używać narzędzia rabbitmqadmin. Które można wykorzystać do pełnej interakcji z systemem. http://www.rabbitmq.com/management-cli.html

Na przykład:

rabbitmqadmin get queue=<QueueName> requeue=false

przekaże Ci pierwszą wiadomość spoza kolejki.

robthewolf
źródło
1
Dzięki, działa dla mnie! to może się przyczynić: domyślnie rabbitmqadmin nie może być wywoływana z każdego miejsca. Znajduje się w /var/lib/rabbitmq/mnesia/rabbit@NODENAME-plugins-expand/rabbitmq_management-3.1.3/priv/www/cli. Trzeba poprawić uprawnienia (chmod 755 rabbitmqadmin) i może skopiować do / usr / local / bin, patrz rabbitmq.com/management-cli.html
Scherbius.com
Nie, możesz pobrać go z linku i udostępnić, umieszczając go gdzieś na swojej ścieżce.
robthewolf
7
Jeśli chcesz tylko obejrzeć wiadomość, a nie wyjmować jej z kolejki, powinieneś upuścić requeue=falsebit i po prostu zrobićrabbitmqadmin get queue=<QueueName>
jonatan
1
Powinieneś być świadomy, że wiadomości o ponownym wysłaniu ustawiają flagę ponownego dostarczenia, więc kolejni konsumenci nie otrzymają identycznej wiadomości
aKiRa
Czy mogę zobaczyć treść wiadomości w interfejsie internetowym?
gstackoverflow
40

Oto polecenia, których używam, aby pobrać zawartość kolejki:

RabbitMQ w wersji 3.1.5 na Linuksie Fedory przy użyciu https://www.rabbitmq.com/management-cli.html

Oto moje wymiany:

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

Oto moja kolejka:

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

Wrzuć kilka elementów do 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 widzi komunikaty w kolejce:

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
źródło
2
To polecenie, sudo python rabbitmqadmin get queue=myqueue requeue=true count=10aby zobaczyć wiadomości lub usunąć z kolejki wiadomości od końca, a następnie ponownie umieścić je na wierzchu. Czy istnieje sposób, aby po prostu zobaczyć wiadomości zamiast je usuwać?
Akshay Hazari
Przypuszczam, że get i requeue = true zasadniczo mówi nam, że wiadomości są dekolejowane, wyświetlane i ponownie kolejkowane (pped_back to front).
Akshay Hazari,
1
Czy rabbitmqadminsudo jest tutaj potrzebne, gdy łączy się z internetowym interfejsem API?
Richlv
Dlaczegorequeue=True
stephen
20

Napisałem rabbitmq-dump-queue, która umożliwia zrzucanie wiadomości z kolejki RabbitMQ do plików lokalnych i ponowne wpisywanie wiadomości w ich oryginalnej kolejności.

Przykładowe użycie (aby zrzucić pierwsze 50 wiadomości z kolejki incoming_1):

rabbitmq-dump-queue -url="amqp://user:[email protected]:5672/" -queue=incoming_1 -max-messages=50 -output-dir=/tmp
dubek
źródło
10

możesz użyć RabbitMQ API, aby uzyskać licznik lub wiadomości:

/api/queues/vhost/name/get

Pobierz wiadomości z kolejki. (To nie jest HTTP GET, ponieważ zmieni stan kolejki). Powinieneś opublikować treść wyglądającą następująco:

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

count kontroluje maksymalną liczbę otrzymywanych wiadomości. Możesz otrzymać mniej komunikatów, jeśli kolejka nie może ich natychmiast dostarczyć.

rekeue określa, czy wiadomości zostaną usunięte z kolejki. Jeśli requeue jest prawdziwe, zostaną one ponownie ustawione, ale ich flaga ponownego dostarczenia zostanie ustawiona. kodowanie musi mieć wartość „auto” (w takim przypadku ładunek zostanie zwrócony jako ciąg znaków, jeśli jest prawidłowy w formacie UTF-8, aw innym przypadku zakodowany w base64) lub „base64” (w takim przypadku ładunek będzie zawsze zakodowany w formacie base64). Jeśli truncate jest obecne, obcina ładunek wiadomości, jeśli jest większy niż podany rozmiar (w bajtach). obcięcie jest opcjonalne; wszystkie inne klucze są obowiązkowe.

Należy pamiętać, że ścieżki publikowania / pobierania w interfejsie HTTP API są przeznaczone do wstrzykiwania wiadomości testowych, diagnostyki itp. - nie zapewniają niezawodnego dostarczania i dlatego powinny być traktowane jako narzędzie administratora systemu, a nie ogólne API do przesyłania wiadomości.

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

Jesse Yan
źródło
0

Jeśli chcesz mieć wiele wiadomości z kolejki, powiedzmy 10 wiadomości, polecenie do użycia to:

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

Jeśli nie chcesz, aby wiadomości były żądane, po prostu zmień ackmodena ack_requeue_false.

Calleniah
źródło