首页 > 解决方案 > 多码头工人应用程序中的芹菜

问题描述

项目结构

app/
    flask_app/
        app.py
        Dockerfile
    worker_type_1/
        worker_core/
            core.py
        celery.py
        Dockerfile
    worker_type_3/
        worker_core/
            core.py
        celery.py
        Dockerfile
    worker_type_3/
        worker_core/
            core.py
        celery.py
        Dockerfile

每个工人执行不同的任务。任务由 flask_app 完成。Dockerfile 运行 celery worker。

我对此有几个问题。

  1. 这是构建项目的正确方法吗?
  2. 应该在哪里定义工人侦听的队列?

标签: pythonflaskkubernetesrabbitmqcelery

解决方案


我不会采用这种方法,而是构建一个配置了环境变量的代码库和容器。

由于您希望有不同的“类”工作人员用于自动缩放目的,我会使用Celery Task Routing将您的任务推送到适当的队列。

部署工作人员时,芹菜有一个参数来定义要从哪个队列工作,因此您只需要更改容器中工作人员的启动命令。您最好的选择是将其设置为环境变量,以便您的配置脚本可以轻松启动它。

celery -A proj worker -Q $QUEUE_NAME

这样做的好处是更简单的构建、调试和部署过程。


推荐阅读