Rabbitmq 从多个队列获取任务

Rabbitmq 从多个队列获取任务,rabbitmq,celery,Rabbitmq,Celery,我有两种类型的任务,一种是由用户生成的,另一种是大量创建的。任务将分开队列(“短”和“长”) 当一个队列中有任务时(即,大批量),芹菜只提取那些任务,完全忽略另一个队列,直到整个批次完成 Example: send 100 slow tasks to "long" queue send 100 small tasks to "short" queue send 100 slow tasks to "long" queue send 100 small tasks to "short" queue

我有两种类型的任务,一种是由用户生成的,另一种是大量创建的。任务将分开队列(“短”和“长”) 当一个队列中有任务时(即,大批量),芹菜只提取那些任务,完全忽略另一个队列,直到整个批次完成

Example:
send 100 slow tasks to "long" queue
send 100 small tasks to "short" queue
send 100 slow tasks to "long" queue
send 100 small tasks to "short" queue

Celery behaviour:
process 100 tasks form "long" queue
process 100 tasks form "short" queue 
process 100 tasks form "long" queue 
process 100 tasks form "short" queue
即使我为慢任务设置了rate_限制,也会发生这种情况,即“长”队列。我得到的只是缓慢的任务会阻塞系统更长时间:/
有没有办法确保芹菜从所有队列中提取任务?(我在RabbitMQ中使用芹菜2.5.1)

您可以为每个队列启动单独的芹菜工作程序:

$celeryd-Q短款

$celeryd-Q长


在这种情况下,每种类型的任务都将由单独的工作人员独立处理。

这是我目前的解决方案。我以相当一般的方式提出了这个问题。因为我至少有3个队列,这只会随着时间的推移而增加。为什么芹菜不能处理任务后(由于速率限制),停止寻找它可以处理的任务(即在其他队列中)?Thak you 0x00mh,这看起来是目前唯一合理的解决方案。如果我能找到更好的问题,我会更新这个问题。这可能是因为使用默认的exchange(两者都相同)造成的吗?