这个问题很简单,但是Google或Pika开源代码没有帮助。有没有办法在Pika中查询当前队列大小(项目计数器)?

最佳答案

在AMQP协议(protocol)中有两种获取队列大小的方法。您可以使用Queue.Declare或Basic.Get。

如果您使用的是使用Basic.Consume到达的消息,那么除非断开连接(超时)并重新声明队列,否则您将无法获取此信息,否则将收到一条消息但不确认。在较新版本的AMQP中,您可以主动重新排队该消息。

至于Pika,我不知 Prop 体细节,但是AMQP的Python客户端一直在我这边刺。通常,您将需要使用猴子补丁类来获取所需的信息,或者允许队列使用方超时,以便您可以定期执行其他操作,例如记录统计信息或找出队列中有多少消息。

解决此问题的另一种方法是放弃,并使用Pipe类运行sudo rabbitmqctl list_queues -p my_vhost。然后解析输出以找到所有队列的大小。如果这样做,您将需要配置/etc/sudoers来不要求通常的sudo密码。

我祈祷其他人拥有更多的Pika经验来回答这一问题,指出您可以如何完成我提到的所有事情,在这种情况下,我将下载Pika并努力尝试。但是,如果没有发生这种情况,并且您在猴子修补Pika代码方面遇到困难,请查看haigha。我发现它们的代码比其他Python AMQP客户端库更直接,因为它们更加贴近AMQP协议(protocol)。

10-07 14:49