为什么你不能看看兔子队列中的消息

如果我的理解是正确的,你不能真正的看兔子队列中的消息而不把它们拿出来放回去。没有办法使用rabbitmqctl来检查一个队列。

在某些debugging环境中,了解当前队列中的内容非常有用。 有没有办法看到这些消息? 另外,兔子的devise是什么使这个过程变得麻烦?

我还没有亲自使用过,但是我看到RabbitMQ的pipe理插件,我认为你可以监视队列。

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

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

更可行的select是使用firehose示踪器, http: //www.rabbitmq.com/firehose.html [for rabbitmq versions> 2.5]。 这本质上是为了debugging目的而将消息发布到不同的交换机(amq.rabbitmq.trace)。

这里是另外一个在firehose上面写的更好的可见性的graphics用户界面, http: //www.rabbitmq.com/blog/2011/09/09/rabbitmq-tracing-a-ui-for-the-firehose/

您当然可以在RabbitMQ或任何AMQP代理中查看队列的内容。 只是消费的信息,但不承认他们。 一旦你closures了频道,这些消息将被你的“真正的”消费者使用。 请记住,这样做可能会影响您检查的队列中消息的sorting。

而且,RabbitMQ提供的Webpipe理插件允许您从Web界面查看消息的内容。 如果您试图debugging您的系统,这是一个非常有用的工具。

这是旧的,但只是对这个感兴趣的人。 通过访问Queues您可以获得经纪人所有队列的列表。

在这里输入图像说明

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

在这里输入图像说明

这里设置的非常重要的选项是Requeue选项。 如果设置为“ Yes ,则此操作将消耗该消息,因此您可以读取该消息,但会将消息重新写入,因此不会丢失。

在将它们发送到RabbitMQ之前,您可以将它们塞入其他东西中。 我写消息队列软件来做到这一点。 退房http://qdb.io/

有没有一个理智的方式来看待队列,但也许监视进入是一个足够的替代品。 要做到这一点,你需要实现一个中间人监视器。 这需要合作客户:您需要教所有发件人或所有接收者使用不同的交换。

假设你想监视消息来交换“foo”。 你创build一个名为“foo-in”(或其他)的(直接)交换,设置“foo”作为“foo-in”的备用交换,并教导你的所有发送者将他们的消息发送到“foo-in”交换而不是“富”。

您的队列监视器则需要监听“foo-in”,并将所有消息重新发布到“foo”。 只要监视器没有运行,rabbitmq会自行将它们路由到“foo”; 对此的性能损失可以忽略不计。

这是一个rabbitmq的扩展。 有关备用交换机如何工作的详细信息,请参阅http://www.rabbitmq.com/ae.html 。 当然你可以分别使用“foo”和“foo-out”,如果在你的设置中更容易做到的话。

监视一个特定的队列(再一次:队列input,不输出)更容易,但同样需要更改客户端(或创build队列的代码,如果它们是持久的)。 设置扇出交换,将客户端的队列绑定到该交换,然后将交换绑定到原始邮件源。 这是另一个rabbitmq扩展; 请参阅http://www.rabbitmq.com/e2e.html 。 您的显示器只需绑定到该交换机,并将获得发送到客户端队列的所有消息的副本。

有可能在没有确认的情况下得到一条消息,然后拒绝它,这样就不会将消息排除在队列之外。 但是这在pipe理工具中没有实现。

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

您可以先单击Webpipe理中的队列名称,然后单击GetMessages以获取您的消息。 现在它会在这里显示您的消息 在这里输入图像说明