Django + Celery 4错误设置

时间:2016-12-23 13:40:39

标签: python django rabbitmq celery

我正在使用Django 1.10和Celery 4。

我在Celery的文档中发现了泄漏:(

工作人员配置做得很好并且运行正常(我可以看到在RabbitMQ webmin中连接的工作者)。但是我的任务无法连接到RabbitMQ来发布他们的消息。

settings.py

CELERY_BROKER_URL = 'amqp://dev:dev@localhost/dev_virtualhost'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'

celery.py

from __future__ import absolute_import
import os
from celery import Celery

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')

app = Celery('dev_app')
app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

tasks.py

from celery import shared_task

@shared_task(queue='data_to_write')
def test_task(data):
    open('/tmp/test', 'w').write(data)

从Django的Shell我运行此代码并失败:(

test_task.delay('hello world')

AccessRefused:(0,0):( 403)ACCESS_REFUSED - 使用身份验证机制AMQPLAIN拒绝登录。有关详细信息,请参阅代理日志文件。

在RabbitMQ日志中,我看到凭据是guest:guest,no dev:dev就像我在settings.py中写的那样。

我的错误在哪里?感谢

1 个答案:

答案 0 :(得分:2)

解决方案包括将celery.py重命名为celery_app.py以避免自动导入。

然后你必须以这种方式执行芹菜: celery --app=PACKAGE.celery_app:app worker

PACKAGE是放置celery_app.py

的模块(文件夹)