【问题标题】:Multiple Celery instances consuming a single queue多个 Celery 实例消耗一个队列
【发布时间】:2014-09-11 15:11:31
【问题描述】:

是否有可能在不同的机器上使用多个 celery 实例从单个任务队列中消费,使用 django 最好使用 django-orm 作为后端? 如果可能的话,我该如何实现它,我似乎找不到任何文档。

【问题讨论】:

    标签: python django celery celery-task


    【解决方案1】:

    是的,有可能,他们只需要使用相同的broker。例如,如果您使用 AMQP,则服务器上的配置必须共享相同的

    BROKER_URL = 'amqp://user:password@localhost:5672//'

    有关详细信息,请参阅routing page。例如,假设您想为两台服务器创建一个公共队列,然后每个服务器都有一个特定的队列,您可以这样做

    在服务器 1 上:

    CELERY_ROUTES = {'your_app.your_specific_tasks1': {'queue': 'server1'}}
    user@server1:/$ celery -A your_celery_app worker -Q server1, default
    

    在服务器 2 上:

    CELERY_ROUTES = {'your_app.your_specific_tasks2': {'queue': 'server2'}}
    user@server2:/$ celery -A your_celery_app worker -Q server2, default
    

    当然是可选的,默认情况下所有的任务都会被路由到名为celery的队列中。

    【讨论】:

    • 这种情况下是否需要添加CELERY_ROUTES?我可以使用自动路由吗,现在正在发生的事情是我在 2 台机器上与两个 celery 工人一起尝试,并且两个工人都开始了任务。
    • 不是,不是。这里唯一重要的是工作人员共享同一个代理,因此他们将从名为 celery 的同一个(默认)队列中消费。
    猜你喜欢
    • 2019-02-21
    • 2019-02-20
    • 2020-04-04
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-24
    相关资源
    最近更新 更多