解耦和 Dockerize Django 和 Celery

Posted

技术标签:

【中文标题】解耦和 Dockerize Django 和 Celery【英文标题】:Decouple and Dockerize Django and Celery 【发布时间】:2017-06-01 18:25:53 【问题描述】:

我想知道将 Celery 与 Django 解耦以便将这两个部分 dockerize 并使用 docker swarm service 的最佳方法是什么?通常,使用引用 Django 应用程序的命令启动他们的 celery worker 和 celery beat:

celery worker -A my_app
celery beat -A my_app

据此,我相信 celery 从设置文件和 celery.py 文件中获取配置信息,该文件很容易迁移到微服务。我不完全理解的是这些任务将如何利用 Django ORM?或者说,微服务的口头禅和 Celery 不应该被设计为对 Django REST Framework API 进行 GET/POST 调用,以获取完成任务所需的数据?

【问题讨论】:

您找到任何相关信息了吗?我同样希望将我的 django/celery 应用程序移动到使用 swarm,但我遇到了很多问题正确 dockerizing 它,很想听听你是否有任何成功! matthewminer.com/2015/02/21/… 【参考方案1】:

我使用了一个设置,其中 django 应用程序及其 celery worker 的代码是相同的(就像在一个存储库中一样)。

在部署时,我确保在各处发布相同的代码,以避免 ORM 等出现任何意外...

Celery 以对 django 应用程序的引用开始,以便它可以访问模型等...

worker 和主应用程序之间的通信通过消息队列(rabbitmqredis...)或通过数据库(如 celery worker 直接在 db 中工作,因为它知道模型等...)。

我不确定这是否遵循微服务的原则,但它确实有效 :)

【讨论】:

【参考方案2】:

Celery 的 .send_task.signature 可能会有所帮助: https://www.distributedpython.com/2018/06/19/call-celery-task-outside-codebase/

【讨论】:

以上是关于解耦和 Dockerize Django 和 Celery的主要内容,如果未能解决你的问题,请参考以下文章

使用 mongoDB Dockerize Django 应用程序

使用 Django、webpack、reactjs、react-router 解耦前端和后端

[转] 利用dockerize模板为容器内应用生成配置文件和环境变量

Dockerize Wildfly 和 ssh

Django + Docker - 服务器错误 500。长帖子

Dockerize adonis.js + mysql