首页 > 解决方案 > 芹菜工人如何在 Heroku 中进行交流

问题描述

我在 Heroku 应用程序中有一些芹菜工人。我的应用正在使用python3.6and django,这些是相关的依赖项及其版本:

我不知道这对这个问题是否有用,但以防万一。在 Heroku 上,我们正在运行Heroku-18堆栈。

像往常一样,我们在 a 中声明了我们的工人Procfile,其内容如下:

web: ... our django app ....
celeryd: python manage.py celery worker -Q celery --loglevel=INFO -O fair
one_type_of_worker: python manage.py celery worker -Q ... --maxtasksperchild=3 --loglevel=INFO -O fair
another_type: python manage.py celery worker -Q ... --maxtasksperchild=3 --loglevel=INFO -O fair

所以,我目前对这个过程的理解如下:

我们的 celery 队列在多个 worker 上运行,每个 worker 在 Heroku 上作为一个 dyno 运行(不是服务器,而是一个“工作进程”之类的东西,因为服务器不是 Heroku 上的概念)。我们还有多个 dyno 运行同一个队列的同一个 celery worker,这导致该队列有多个并行“线程”来同时运行更多任务(可扩展性)。网络工作者、celery 工作者和 celery 队列可以相互通信,因为 celery 管理它们之间的编排。我认为具体是经纪人来承担这一责任。但是例如,这让我们的网络工作者在特定队列上安排一个 celery 任务,并将其路由到正确的队列/工作者,或者在一个队列/工作者中运行的任务可以在不同的队列/工作者上安排任务。

现在我的问题来了,工人沟通了吗?他们是否在 localhost 中使用带有端口的 API 端点?RCP?他们使用经纪人网址吗?魔法?

我问这个是因为我试图在 ECS 中复制这个设置,我需要知道如何为 celery 设置它。

标签: pythondjangoherokucelerydjango-celery

解决方案


在这里您可以了解 celery 在 heroku 中的工作原理:https ://devcenter.heroku.com/articles/celery-heroku

如果没有为 celery 安装 Heroku dyno,就无法在 Heroku 上运行 celery。此外,请确保您在 Django celery 设置中配置了 Redis。

要在 Heroku 上运行 celery,只需将此行添加到您的Procfile

 worker: celery -A YOUR-PROJECT_NAME worker -l info -B

注意:上面的 celery 命令将同时运行 celeryworker和 celerybeat

如果要单独运行,可以使用单独的命令,但建议使用一个命令


推荐阅读