为什么你不能看看Rabbit Queue中的消息

时间:2012-03-26 14:39:31

标签: rabbitmq

如果我的理解是正确的,你实际上可以查看兔子队列中的消息而不将它们取出并重新插入。没有办法使用rabbitmqctl检查队列。

在某些调试上下文中,了解队列中当前的内容非常有用。有没有办法得到消息?另外,Rabbit的设计是什么让这个过程变得麻烦?

8 个答案:

答案 0 :(得分:27)

管理API中的每个队列都有一个“获取消息”部分。然而,这会导致消息被消耗,因此是一种破坏性的行为。我们可以将此消息重新排队到队列中,但代价是牺牲消息的顺序[对于rabbitmq版本< 2.7.0]

更可行的替代方案是使用firehose示踪剂http://www.rabbitmq.com/firehose.html [对于rabbitmq版本> 2.5]。这基本上是为了调试目的而将消息发布到不同的交换(amq.rabbitmq.trace)。

这是另一个在firehose之上编写的GUI,以提高可见性,http://www.rabbitmq.com/blog/2011/09/09/rabbitmq-tracing-a-ui-for-the-firehose/

答案 1 :(得分:17)

您当然可以查看RabbitMQ或任何AMQP代理中队列的内容。只是消费消息但不承认它们。关闭频道后,您的“真正”消费者可以使用这些消息。请记住,这样做可能会影响您检查的队列中的消息顺序。

此外,RabbitMQ提供的Web管理插件允许您从Web界面查看消息的内容。如果您正在尝试调试系统,那么这是一个非常有用的工具。

答案 2 :(得分:15)

我还没有亲自使用过这个,但是我看到了RabbitMQ的管理插件,我认为它允许你监控队列。

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

答案 3 :(得分:10)

这是旧的,但仅限于对此感兴趣的任何人。 通过访问Queues,您可以获得经纪人所有队列的列表。

enter image description here

按下您感兴趣的任何队列,向下滚动以查找此部分

enter image description here

此处设置的非常重要的选项是Requeue选项。 如果设置为Yes,则此操作将使用该消息,因此 你可以读它,但它会重新排列它,所以它不会丢失。

答案 4 :(得分:3)

在将它们发送到RabbitMQ之前,您可以先将它们填入其他内容。我写了消息排队软件来做到这一点。查看http://qdb.io/

答案 5 :(得分:3)

可以在没有确认的情况下获取消息然后拒绝它,这不会将消息从队列中取出。 但是这没有在管理工具中实现。

并且消息被锁定直到被释放,这意味着在被拒绝之前没有其他消费者可以消费它。

答案 6 :(得分:1)

您可以先在Web管理中单击队列名称,然后单击GetMessages以获取您的消息。 现在它将在此处显示您的消息 enter image description here

答案 7 :(得分:0)

您可以使用队列查看器(https://www.queueviewer.com)。它要求启用RabbitMQ的管理插件。