使用包含多个应用的​​Celery队列

时间:2017-07-18 03:18:58

标签: celery django-celery celery-task

如何为多个应用程序使用同名的Celery队列?

我有一个带有N个客户端数据库的应用程序,它们都需要在特定队列M上进行Celery任务处理。

对于每个客户数据库,我都有一个单独的芹菜工作者,我发布如下:

celery worker -A client1 -n client1@%h -P solo -Q long
celery worker -A client2 -n client2@%h -P solo -Q long
celery worker -A client3 -n client3@%h -P solo -Q long

当我立刻运行所有工作人员并尝试将任务启动到client1时,我发现它似乎永远不会执行。然后我杀死了除第一个之外的所有工人,现在第一个工人接收并执行任务。事实证明,即使每个工作人员的应用程序使用不同的BROKER_URL,使用相同的队列也会导致他们窃取彼此的任务。

这令我感到惊讶,因为如果我没有指定-Q,那么意味着Celery从"默认"排队,这没有发生。

如何使用自定义队列阻止此操作?唯一的解决方案是在队列名称中包含客户端ID吗?或者是否有更多"适当的"溶液

1 个答案:

答案 0 :(得分:0)

对于多个应用程序,我使用不同的Redis数据库,如

redis://localhost:6379/0
redis://localhost:6379/1