【问题标题】:Django celery beat with Django as backendDjango celery 以 Django 作为后端
【发布时间】:2018-02-19 15:10:17
【问题描述】:

我正在尝试设置Django-celery-beat 以创建定期任务。 我的配置如下:

from celery import Celery
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.local')
celery = Celery(broker="django-db")
celery.autodiscover_tasks()

CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'UTC'
CELERY_ENABLE_UTC = True
CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers.DatabaseScheduler'

我正在尝试使用 Django 作为数据库并同时运行节拍服务和工作人员。

当我像这样启动工人时:

celery -A monitoring worker --loglevel=DEBUG --app=config.settings.local

...我明白了:

ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@django-db:5672//: [Errno 8] nodename nor servname provided, or not known.

当我尝试它时:

celery -A monitoring beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler --app=config.settings.local

我收到此错误:

ERROR/MainProcess] beat: Connection error: [Errno 8] nodename nor servname provided, or not known. Trying again in 4.0 seconds...

我希望能够通过 Django 管理员创建定期任务,但我被困在这一点上,所以欢迎任何帮助。

【问题讨论】:

    标签: django django-celery


    【解决方案1】:

    我认为您还必须为CELERY_RESULT_BACKEND 添加设置。将其设置为'django-db',就像您对代理所做的那样。如果这还不够,请尝试在设置中使用 CELERY_BROKER_URL 而不是作为参数设置代理。

    【讨论】:

      【解决方案2】:

      您使用django-db 作为代理,其中 celery 认为它是主机地址。您应该使用真实的代理地址(例如,amqp://ip-or-host-here 用于 rabbitmq)。尝试设置broker_url 并删除Celery() 中的代理参数以将其指向正确的方向。

      【讨论】:

      • 嗨@hurturk,鉴于我正在使用 django-celery-beat,当我想使用 Django 作为后端时,使用 rabbitmq 有什么意义?
      • Afaik,django-db 不是代理,而是为结果后端目的而配置的。您仍然需要经纪人。
      猜你喜欢
      • 2012-04-14
      • 2019-11-15
      • 1970-01-01
      • 2012-01-15
      • 2016-02-26
      • 1970-01-01
      • 2014-12-06
      • 2018-02-07
      • 2023-02-15
      相关资源
      最近更新 更多