celery 工人的 rabbitmq 循环消耗

chr*_*ris 6 rabbitmq celery

我正在使用 RabbitMQ 代理,并且有一个订阅该代理的 Celery 工人。从我的测试来看,RabbitMQ 似乎按 FIFO 顺序处理消息。因为一个队列已经被填充,然后另一个,然后另一个,依此类推,我的工作人员消耗了队列 1 中的所有消息,并且只有在队列 1 完成后才移动到队列 2。

是否有可能改变这种行为?我希望 Celery 工人以循环方式消费,即消费来自队列 1 的消息,然后消费来自队列 2 的消息,依此类推,只有在从每个队列消费了一条消息后才返回队列 1其他队列。

ist*_*iuk 2

是的,您必须将您的值减少prefetch_count到 1,以便一次只获取 1 条消息。在 Celery 中,您可以通过设置CELERYD_PREFETCH_MULTIPLIER为 1 来存档此内容。您可能还需要设置task_acks_late = True,请确保您阅读了两者的文档。

来自芹菜文档

要禁用预取,请将worker_prefetch_multiplier设置为1。将该设置更改为0将允许工作线程继续消费尽可能多的消息。