Ошибка потребительского подключения с django и celery + rabbitmq?

Я пытаюсь настроить celeryd с django и rabbit-mq. До сих пор я сделал следующее:

  • Установленный сельдерей из пипса
  • Установленный rabbitmq через debs, доступные из их репозитория
  • Добавлен пользователь и vhost для rabbitmq через rabbitmqctl, а также разрешения для этого пользователя.
  • Запустил сервер rabbitmq
  • Установленный django-сельдерей через pip
  • Настройте django-сельдерей, включая его таблицы
  • Настроить различные параметры в settings.py(BROKER_HOST, BROKER_PORT, BROKER_USER, BROKER_PASSWORD, BROKER_VHOST, а также импортировать djecelery, вызывая функцию настройки и добавляя ее к INSTALLED APPS). Я дважды проверял, и все эти значения верны (по крайней мере, пользователь, пароль и vhost верны).

Итак, когда я запускаю 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]  

 -------------- [email protected] v2.5.3
---- **** -----
--- * ***  * -- [Configuration]
-- * - **** ---   . broker:      amqp://[email protected]: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] [email protected] 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

Ответ 1

Ваша проблема в BROKER_URL.

С дополнительным VHOST правильным конфигом будет:

BROKER_URL='amqp://[email protected]:5672//'
BROKER_VHOST='/celeryhost'

Ответ 2

Для меня закончилось следующее завершение URL: ... @локальный: 5672/celeryvhost

Ответ 3

У меня была аналогичная проблема с RabbitMQ, и проблема заключалась в том, что у моего пользователя нет разрешения на создание сообщений в RabbitMQ.

Попробуйте запустить следующий script на вашем сервере 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 ".*" ".*" ".*"

Ответ 4

Ваш сервер 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",
)

Ответ 5

Как выглядит ваш BROKER_URL в settings.py?

По умолчанию у RabbitMQ есть гостевой пользователь, поэтому, если вы можете подключиться к

BROKER_URL = "amqp://guest:[email protected]:5672//"

тогда проблема заключается в вашей настройке для пользователя, пароля или виртуального хоста RabbitMQ.