与django和芹菜+ rabbitmq的消费者连接错误?

Pau*_*cks 11 python django rabbitmq celery django-celery

我正在尝试用django和rabbit-mq建立celeryd.到目前为止,我已经完成了以下工作:

  • 从pip安装的芹菜
  • 通过他们的存储库提供的debs安装rabbitmq
  • 通过rabbitmqctl为rabbitmq添加了用户和vhost,以及该用户的权限
  • 启动了rabbitmq-server
  • 通过pip安装django-celery
  • 设置django-celery,包括它的桌子
  • 配置settings.py中的各种内容(BROKER_HOST,BROKER_PORT,BROKER_USER,BROKER_PASSWORD,BROKER_VHOST,以及导入djecelery,调用设置功能并将其添加到安装的应用程序中).我已经仔细检查了所有这些值是正确的(至少,用户,密码和虚拟主机是正确的).

所以现在,当我运行时,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
Run Code Online (Sandbox Code Playgroud)

小智 12

你的问题在于BROKER_URL.

另外VHOST,正确的配置是:

BROKER_URL='amqp://celeryuser@localhost:5672//'
BROKER_VHOST='/celeryhost'
Run Code Online (Sandbox Code Playgroud)

  • 不推荐使用`BROKER_VHOST`设置.你可以在`BROKER_URL`变量中设置`VHOST`:`BROKER_URL ='amqp:// celeryuser @ localhost:5672/celeryhost'` (5认同)

jos*_*iti 1

您的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",
)
Run Code Online (Sandbox Code Playgroud)