[英]Consumer Connection error with django and celery+rabbitmq?
我正在尝试用django和rabbit-mq建立celeryd。 到目前为止,我已经完成了以下工作:
所以现在,当我运行python manage.py celeryd -l info
出现连接错误(见下文)。 任何人都知道为什么?
$ python manage.py celeryd -l info
/usr/local/lib/python2.7/dist-packages/djcelery/loaders.py:108: UserWarning: Using settings.DEBUG leads to a memory leak, never use this setting in production environments!
warnings.warn("Using settings.DEBUG leads to a memory leak, never "
[2012-05-15 18:38:04,486: WARNING/MainProcess]
-------------- celery@ubuntu v2.5.3
---- **** -----
--- * *** * -- [Configuration]
-- * - **** --- . broker: amqp://celeryuser@localhost:5672/celeryhost
- ** ---------- . loader: djcelery.loaders.DjangoLoader
- ** ---------- . logfile: [stderr]@INFO
- ** ---------- . concurrency: 1
- ** ---------- . events: OFF
- *** --- * --- . beat: OFF
-- ******* ----
--- ***** ----- [Queues]
-------------- . celery: exchange:celery (direct) binding:celery
[Tasks]
[2012-05-15 18:38:04,562: INFO/PoolWorker-1] child process calling self.run()
[2012-05-15 18:38:04,565: WARNING/MainProcess] celery@ubuntu has started.
[2012-05-15 18:38:07,572: ERROR/MainProcess] Consumer: Connection Error: [Errno 104] Connection reset by peer. Trying again in 2 seconds...
^C[2012-05-15 18:38:08,434: WARNING/MainProcess] celeryd: Hitting Ctrl+C again will terminate all running tasks!
[2012-05-15 18:38:08,435: WARNING/MainProcess] celeryd: Warm shutdown (MainProcess)
[2012-05-15 18:38:09,372: INFO/PoolWorker-1] process shutting down
[2012-05-15 18:38:09,373: INFO/PoolWorker-1] process exiting with exitcode 0
[2012-05-15 18:38:09,376: INFO/MainProcess] process shutting down
您的问题出在BROKER_URL
。
使用额外的VHOST
,正确的配置将是:
BROKER_URL='amqp://celeryuser@localhost:5672//'
BROKER_VHOST='/celeryhost'
对我来说,以下URL结尾有效:... @ localhost:5672 / celeryvhost
我与RabbitMQ有类似的问题,问题是我的用户没有权限在RabbitMQ中创建消息。
尝试使用guest用户在RabbitMQ服务器上运行以下脚本,如果它创建了一个作业,请与您的用户一起尝试:
from celery import Celery
app = Celery('tasks', broker='amqp://radek:**@localhost:5672//')
@app.task
def add(x, y):
return x + y
如果您遇到相同的错误,只需为您的用户设置权限:
rabbitmqctl set_permissions -p / radek ".*" ".*" ".*"
您的rabbitmq服务器不能正常启动和/或配置。 确认它是,然后再试一次 - 或者,更好的是,如果你只是想测试一些东西并且你是队列不可知的,取出rabbitmq并开始使用redis。 配置起来要容易得多。
我只是从我的一个项目中剪切并粘贴了这段代码,它运行得很好:
import djcelery
from datetime import timedelta
djcelery.setup_loader()
BROKER_BACKEND = "redis"
BROKER_HOST = "localhost"
BROKER_PORT = 6379
BROKER_VHOST = "0"
CELERYD_LOG_LEVEL = 'DEBUG'
CELERY_RESULT_BACKEND = "redis"
CELERY_TASK_RESULT_EXPIRES = 150000
REDIS_HOST = "localhost"
REDIS_PORT = 6379
REDIS_DB = "0"
CELERYD_CONCURRENCY = 1
CELERYD_MAX_TASKS_PER_CHILD = 4
CELERY_IMPORTS = (
"apps.app1.tasks",
"apps.app2.tasks",
)
你的BROKER_URL在settings.py中是什么样的?
默认情况下,RabbitMQ有一个访客用户,所以如果你可以连接
BROKER_URL = "amqp://guest:guest@localhost:5672//"
然后问题是您的RabbitMQs用户,密码或虚拟主机的设置。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.