使用RabbitMQ的Pika:来自单个队列的多个消费者应用程序中的消息分发

时间:2015-06-10 19:39:25

标签: python rabbitmq pika

环境: python,pika,RabbitMQ。

我有一个已经有100条消息的队列。 当2个消费者应用程序一个接一个地启动时,所有预先存在的消息正由第一个消费者处理,而不是在正在等待消息的两个消费者之间分发。

然而,任何放入队列的新消息都在消费者之间分配。 问题是如果消费者需要很长时间来处理,t enter code here他在一个消费者身上加载所有消费者,直到从队列中消耗了初始预先存在的消息。

但是,如果Consumer1被杀死,消息将被传递给Consumer2(这是预期的。)

我正在使用SelectionConnect,

prefetch_count=(tried both 0 and 1),
prefetch_size = 0,
no_ack = False,

有没有办法对它进行配置,即使消费者将在不同时间启动,也会在多个消费者之间共享队列中预先存在的消息(比如在增加时根据负载添加更多消费者)

任何帮助表示赞赏。 谢谢。

1 个答案:

答案 0 :(得分:0)

我只需移动basic_qos调用就可以解决它,将预取计数设置为1 on_channel_create回调方法。

出于某种原因,在basic_consume不够好之前将预取值设置为1。必须与pika的io循环有关。