É possível visualizar o conteúdo da mensagem RabbitMQ diretamente da linha de comando?

101

É possível visualizar o conteúdo da mensagem RabbitMQ diretamente da linha de comando?

sudo rabbitmqctl list_queues lista as filas.

Existe algum comando como sudo rabbitmqctl list_queue_messages <queue_name>?

Tesoura de jardim
fonte
1
Sobre a instalação do rabbitmqadmin no linux stackoverflow.com/questions/36336071/…
Alexey Shrub

Respostas:

105

Você deve habilitar o plugin de gerenciamento.

rabbitmq-plugins enable rabbitmq_management

Veja aqui:

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

E aqui para os detalhes de gestão.

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

Finalmente, uma vez configurado, você precisará seguir as instruções abaixo para instalar e usar a ferramenta rabbitmqadmin. Que pode ser usado para interagir totalmente com o sistema. http://www.rabbitmq.com/management-cli.html

Por exemplo:

rabbitmqadmin get queue=<QueueName> requeue=false

lhe dará a primeira mensagem fora da fila.

robthewolf
fonte
1
Obrigado, funciona para mim! isso pode contribuir: por padrão, o rabbitmqadmin não pode ser chamado de qualquer lugar. Está localizado em /var/lib/rabbitmq/mnesia/rabbit@NODENAME-plugins-expand/rabbitmq_management-3.1.3/priv/www/cli. É necessário corrigir as permissões para ele (chmod 755 rabbitmqadmin) e talvez copiá-lo para / usr / local / bin, consulte rabbitmq.com/management-cli.html
Scherbius.com
Não, você pode baixá-lo do link e torná-lo acessível colocando-o em algum lugar do seu caminho.
robthewolf
7
Se você quer apenas ver a mensagem, e não retirá-la da fila, você deve parar requeue=falsee fazerrabbitmqadmin get queue=<QueueName>
jonatan,
1
Você deve estar ciente de que as mensagens de recolocação na fila definem o sinalizador de reenvio, então os consumidores subsequentes não receberão uma mensagem idêntica
aKiRa
Posso ver o conteúdo das mensagens na interface da web?
gstackoverflow de
40

Aqui estão os comandos que uso para obter o conteúdo da fila:

RabbitMQ versão 3.1.5 no Fedora linux usando https://www.rabbitmq.com/management-cli.html

Aqui estão minhas trocas:

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

Aqui está minha fila:

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

Enfie alguns itens na minha fila:

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 ver mensagens na fila:

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
fonte
2
É o comando sudo python rabbitmqadmin get queue=myqueue requeue=true count=10para ver as mensagens ou retirar da fila as mensagens do final e, em seguida, recolocá-las na frente. Existe uma maneira de apenas ver as mensagens em vez de retirá-las da fila.
Akshay Hazari
Suponho que get e requeue = true essencialmente nos diz que as mensagens são retiradas da fila, exibidas e recolocadas na fila (push_back to front).
Akshay Hazari
1
Ao se rabbitmqadminconectar à API baseada na web, o sudo é necessário aqui?
Richlv
Por querequeue=True
stephen
20

Eu escrevi rabbitmq-dump-queue que permite despejar mensagens de uma fila RabbitMQ para arquivos locais e enfileirar novamente as mensagens em sua ordem original.

Exemplo de uso (para despejar as primeiras 50 mensagens da fila incoming_1 ):

rabbitmq-dump-queue -url="amqp://user:[email protected]:5672/" -queue=incoming_1 -max-messages=50 -output-dir=/tmp
dubek
fonte
10

você pode usar a API RabbitMQ para obter contagens ou mensagens:

/api/queues/vhost/name/get

Receba mensagens de uma fila. (Este não é um HTTP GET, pois irá alterar o estado da fila.) Você deve postar um corpo parecido com:

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

contagem controla o número máximo de mensagens a serem obtidas. Você pode receber menos mensagens do que isso se a fila não puder fornecê-las imediatamente.

requeue determina se as mensagens serão removidas da fila. Se a recolocação for verdadeira, eles serão recolocados na fila - mas o sinalizador de reenvio será definido. a codificação deve ser "auto" (nesse caso, a carga útil será retornada como uma string se for UTF-8 válido e codificada em base64 de outra forma) ou "base64" (nesse caso, a carga útil será sempre codificada em base64). Se truncar estiver presente, ele truncará a carga útil da mensagem se for maior que o tamanho fornecido (em bytes). truncar é opcional; todas as outras chaves são obrigatórias.

Observe que os caminhos de publicação / obtenção na API HTTP destinam-se a injetar mensagens de teste, diagnósticos, etc. - eles não implementam entrega confiável e, portanto, devem ser tratados como uma ferramenta de administrador de sistema, em vez de uma API geral para mensagens.

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

Jesse Yan
fonte
0

Se você quiser várias mensagens de uma fila, digamos 10 mensagens, o comando a ser usado é:

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

Se você não quiser que as mensagens sejam colocadas na fila, basta alterar ackmodepara ack_requeue_false.

Calleniah
fonte