rabbitmq 为什么不能在Rabbit队列中查看邮件

6uxekuva  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(9)|浏览(156)

如果我的理解是正确的,您实际上无法查看rabbit队列中的消息而不将它们取出并放回。没有办法使用rabbitmqctl来检查队列。
在一些调试环境中,知道队列中当前有什么是非常有用的。有没有办法获取消息?还有,Rabbit的设计是什么让这个过程很麻烦?

ycggw6v2

ycggw6v21#

在管理API中,每个队列都有一个“获取消息”部分。然而,这会导致消息被消耗,因此是一个破坏性的操作。我们可以将此消息重新排队到队列中,但代价是牺牲消息的顺序[对于rabbitmq版本〈2.7.0]。
一个更可行的替代方案是使用firehose跟踪器http://www.rabbitmq.com/firehose.html [对于rabbitmq版本〉2.5],这实际上是将消息发布到一个不同的交换(amq.rabbitmq.trace),只是为了调试。
下面是另一个写在消防软管顶部的GUI,以获得更好的可见性,http://www.rabbitmq.com/blog/2011/09/09/rabbitmq-tracing-a-ui-for-the-firehose/

4nkexdtk

4nkexdtk2#

你当然可以在RabbitMQ或任何AMQP代理中查看队列的内容。只是使用消息,但不确认它们。一旦关闭通道,消息将可供"真实的的“使用者使用。请记住,这样做可能会影响所检查队列中消息的顺序。
此外,RabbitMQ提供的web管理插件允许您从web界面查看消息的内容。如果您试图调试您的系统,这是一个非常有用的工具。

whhtz7ly

whhtz7ly3#

这是旧的,但只是为任何人感兴趣的。通过访问Queues,你有一个列表的所有队列的代理。

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

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

非常重要:当消息重新排队时,消息的原始顺序将丢失

roqulrg3

roqulrg34#

我个人还没有使用过这个,但是我看到了RabbitMQ的管理插件,我认为它允许您监视队列。
http://www.rabbitmq.com/management.html

06odsfpq

06odsfpq5#

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

5tmbdcev

5tmbdcev6#

你可以在把它们发送到RabbitMQ之前先把它们塞到别的东西里。我写了一个消息队列软件来做这个。

6pp0gazn

6pp0gazn7#

没有合理的方法来查看队列,但是监视进入队列的内容可能是一个足够的替代方法。为此,您需要实现一个中间人监视器。这需要协作的客户端:您需要教导所有发送者或所有接收者使用不同的交换。
假设你想监控交换“foo”的消息,你创建了一个名为“foo-in”(或其他名称)的(直接)交换,将“foo”设置为“foo-in”的备用交换,并教导所有的发送者将他们的消息发送到“foo-in”交换,而不是“foo”。
然后,您的队列监视器需要监听“foo-in”,并将所有消息重新发布到“foo”。因此性能损失可以忽略不计。
这是一个rabbitmq扩展名。请参阅http://www.rabbitmq.com/ae.html以了解备用交换如何工作。当然,如果在您的设置中更容易做到的话,您可以分别使用“foo”和“foo-out”。
监视特定队列(同样:队列输入,而不是输出)更容易,但是同样需要改变客户端(或者创建队列的代码,如果它们是持久的话)。建立一个扇出交换,将客户端的队列绑定到它,然后将交换绑定到原始消息源。这是另一个rabbitmq扩展;您的监视器只需要绑定到该交换,并将获得发送到客户端队列的所有消息的副本。

vdzxcuhz

vdzxcuhz8#

有可能在没有确认的情况下获得消息,然后拒绝它,这不会使消息离开队列。但这在管理工具中没有实现。
此外,消息在释放之前是锁定的,这意味着在消息被拒绝之前,其他使用者无法使用它。

7kjnsjlb

7kjnsjlb9#

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

相关问题