是否可以直接从命令行查看RabbitMQ消息的内容?


Answers:


106

您应该启用管理插件。

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 2014年

不,您可以从链接下载它,并将其放在路径中即可访问。
robthewolf 2014年

7
如果您只想查看消息,而不是将消息从队列中取出,则应该放下该消息,然后继续requeue=false操作rabbitmqadmin get queue=<QueueName>
jonatan 2015年

1
您应该知道,重新排队的消息设置了重新交付标志,因此后续使用者将不会收到相同的消息
aKiRa

我可以在Web界面中看到邮件内容吗?
gstackoverflow

40

这是我用来获取队列内容的命令:

使用https://www.rabbitmq.com/management-cli.html在Fedora linux上的RabbitMQ版本3.1.5

这是我的交流:

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从末尾查看消息或使消息出队,然后将它们重新排队到最前面的命令。有没有一种方法可以仅查看消息而不是使消息出队。
阿克斯哈扎里

我想get和requeue = true本质上告诉我们消息已出队,显示和重新出队(从Pushed_back到最前面)。
阿克斯哈扎里

1
由于rabbitmqadmin所连接到基于Web的API,是须藤需要在这里?
Richlv

为什么requeue=True
-Stephen

20

我写了Rabbitmq-dump-queue,它允许将消息从RabbitMQ队列转储到本地文件,并按其原始顺序重新排列消息。

用法示例(转储queue的前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}

count控制要获取的最大邮件数。如果队列无法立即提供消息,则收到的消息可能少于此。

requeue确定是否从队列中删除消息。如果requeue为true,则将重新排队-但将设置其重新传递的标志。编码必须为“自动”(在这种情况下,如果有效载荷为有效UTF-8,则有效载荷将作为字符串返回,否则将以base64编码)或“ base64”(在这种情况下,有效载荷将始终为base64编码)。如果存在截断,则如果消息有效负载大于给定的大小(以字节为单位),它将截断消息有效负载。截断是可选的;所有其他键都是必需的。

请注意,HTTP API中的publish / get路径用于注入测试消息,诊断等-它们无法实现可靠的传递,因此应被视为sysadmin的工具,而不是用于消息传递的常规API。

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



0

如果要从一个队列中获取多个消息(例如10条消息),则使用的命令是:

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

如果您不希望消息重新排队,只需更改ackmodeack_requeue_false

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.