环境: 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,
有没有办法对它进行配置,即使消费者将在不同时间启动,也会在多个消费者之间共享队列中预先存在的消息(比如在增加时根据负载添加更多消费者)
任何帮助表示赞赏。 谢谢。
答案 0 :(得分:0)
我只需移动basic_qos调用就可以解决它,将预取计数设置为1 on_channel_create回调方法。
出于某种原因,在basic_consume不够好之前将预取值设置为1。必须与pika的io循环有关。