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

Pika with RabbitMQ: Message distribution accross multiple consumer Applications from a single Queue

环境: python、鼠兔、RabbitMQ。

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

然而,放入队列的任何新消息都在两个消费者之间分发。 问题是如果消费者需要很长时间来处理,tenter code here他的负载全部在一个消费者身上,直到消耗掉队列中最初存在的消息。

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

我正在使用 SelectionConnect,

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

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

感谢任何帮助。 谢谢。

我可以通过移动 basic_qos 调用以将预取计数设置为 1 on_channel_create 回调方法来修复它。

出于某种原因,在 basic_consume 之前将预取值设置为 1 不够好。一定和鼠兔的io循环有关。