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

arc*_*oon 45 rabbitmq

如果我的理解是正确的,你实际上无法查看兔子队列中的消息而不将它们取出并将它们放回去.没有办法使用rabbitmqctl来检查队列.

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

Jos*_*eph 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/


Bri*_*lly 19

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

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

  • 当然,但这样做会吃掉有问题的信息。不是预期的结果。 (2认同)
  • @BrianKelly 所以,如果没有其他人拿起它们,你就会再次得到它们。或者,如果其他人先拿起它们,您就会错过一些。两者都不符合我对“监视器”的定义。 (2认同)

Err*_*404 16

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

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

  • 是的,这非常有用!不幸的是,该工具主要提供聚合统计信息,并且没有机制来查看队列中的内容(除非我弄错了). (2认同)

Alk*_*ris 12

这是旧的,但只对任何对此感兴趣的人.通过访问Queues您有一个代理的所有队列的列表.

在此输入图像描述

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

在此输入图像描述

这里设置的非常重要的选项是Requeue选项.如果设置为Yes,则此操作将使用该消息,因此您可以读取它,但它会重新排队,因此它不会丢失.

  • 它不会丢失,但不幸的是它会被重新排队,因此消息的原始顺序(以及可能的时间戳)将会丢失 (4认同)
  • 官方文档说“当消息被重新排队时,如果可能的话,它将被放置到其队列中的原始位置。如果没有(由于多个消费者共享队列时来自其他消费者的并发传递和确认),消息将被重新排队到更接近队列头的位置。” https://www.rabbitmq.com/nack.html (2认同)

Deb*_*ash 5

您可以先在 Web 管理中单击队列名称,然后单击 GetMessages 以获取您的消息。现在它会在此处显示您的消息 在此处输入图片说明