【问题标题】:Using Celery queues with multiple apps在多个应用程序中使用 Celery 队列
【发布时间】:2017-12-22 17:43:18
【问题描述】:

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

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

对于每个客户端数据库,我都有一个单独的 celery worker,我启动如下:

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 的唯一解决方案吗?还是有更“合适”的解决方案?

【问题讨论】:

    标签: celery django-celery celery-task


    【解决方案1】:

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

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

    等等

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-27
    • 2015-12-05
    • 2021-04-08
    • 2015-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多