将芹菜队列与多个应用一起使用



如何将同名的 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 是唯一的解决方案吗?还是有更"合适"的解决方案?

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

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

等。

相关内容

  • 没有找到相关文章

最新更新