我如何在Django中只使用DB来使用Celery?

y1aodyip  于 2023-03-13  发布在  Go
关注(0)|答案(2)|浏览(132)

看看https://docs.celeryq.dev/en/v5.2.7/getting-started/backends-and-brokers/index.html,听起来好像不太可能/不太理想。有一节是关于SQLAlchemy的,但是Django没有使用SQLAlchemy。
在旧的文档中,有https://docs.celeryq.dev/en/3.1/getting-started/brokers/django.html
在最新的Celery / Django版本中,Celery是否可以只使用数据库来存储消息/结果?

pbgvytdp

pbgvytdp1#

是的,你完全可以这么做,即使这不是最好的方法。我用它来做简单的项目,我不想添加Redis。
为此,首先,将SQLAlchemy v1作为依赖项添加到项目中:SQLAlchemy = "1.*"
然后在您的settings.py:

  • 如果您使用PostgreSQL:CELERY_BROKER_URL = sqla+postgresql://user:pwd@127.0.0.1:5432/dbname
  • 如果使用SQLite:CELERY_BROKER_URL = "sqla+sqlite:///" + os.path.join(BASE_DIR, 'your_database.db')。请注意,保存数据库的文件夹必须是可写的。例如,如果您的数据库位于project/dbfolder/database.db中,则chmod 777 project/dbfolder即可。

作为一个旁注,我使用django-celery-results来存储我的任务结果,这样,我就有了一个功能齐全的Celery,而不用在堆栈中使用其他技术工具(如rabbitMQ或Redis)。

gr8qqesn

gr8qqesn2#

如果您真的想使用关系SQL数据库作为代理,SQLAlchemy确实是您的最佳选择,因为Celery已经支持它了。不过我会小心使用这种方法,因为您不仅要使用关系数据库作为消息代理,而且Celery文档也建议注意:
从历史上看,SQLAlchemy并不是最稳定的结果后端,因此如果选择它,应该谨慎进行。
Django实际上并不使用SQLAlchemy,因为它有自己的ORM,但这并不妨碍您在Celery worker中使用SQLAlchemy。

相关问题