Использование MongoDB в качестве очереди сообщений для Celery - PullRequest
5 голосов
/ 24 января 2011

Я пытаюсь использовать MongoDB в качестве очереди сообщений для Celery (в приложении Django).Текущая версия Celery для разработчиков (2.2.0rc2) должна позволять вам это делать, но я не могу заставить кого-то из рабочих подхватить создаваемые мной задачи.

Версии: celery v2.2.0rc3
mongodb 1.6.5
pymongo 1.9
django-celery 2.2.0rc2

В моих настройках у меня есть:

CELERY_RESULT_BACKEND = "mongodb"
CELERY_MONGODB_BACKEND_SETTINGS = {
    # Shouldn't need these - defaults are correct.
    "host": "localhost",
    "port": 27017,
    "database": "celery",
    "taskmeta_collection": "messages",
}

BROKER_BACKEND = 'mongodb'
BROKER_HOST = "localhost"
BROKER_PORT = 27017
BROKER_USER = ""
BROKER_PASSWORD = ""
BROKER_VHOST = ""

import djcelery
djcelery.setup_loader()

Я создал тестФайл tasks.py выглядит следующим образом:

from celery.decorators import task

@task()
def add(x, y):
    return x + y

Если я запускаю celeryd в фоновом режиме, он запускается нормально.Затем я открываю оболочку Python и запускаю следующее:

>>> from myapp.tasks import add
>>> result = add.delay(5,5)
>>> result
<AsyncResult: 7174368d-288b-4abe-a6d7-aeba987fa886>
>>> result.ready()
False

Проблема заключается в том, что ни один рабочий никогда не поднимает задачи.Я пропускаю настройку или что-то?Как указать сельдерею на очередь сообщений?

Ответы [ 4 ]

2 голосов
/ 23 ноября 2011

У нас была такая же проблема. В то время как док говорит, что все задачи должны быть зарегистрированы в Celery, позвонив по номеру

import djcelery
djcelery.setup_loader()

это не сработало должным образом. Таким образом, мы все еще использовали

CELERY_IMPORTS = ('YOUR_APP.tasks',) 

настройка в settings.py. Кроме того, убедитесь, что вы перезапускаете Celery, если добавляете новую задачу, поскольку Celery должен зарегистрировать задачи при первом запуске.

Django, Celerybeat и Celery с MongoDB в качестве брокера

0 голосов
/ 19 мая 2011

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

CELERY_IMPORTS = ("namespace", )
0 голосов
/ 09 октября 2011

У меня была та же проблема, но когда я обновился до сельдерея 2.3.3, все заработало как шарм.

0 голосов
/ 01 марта 2011

Помните, что Kombu работает только с mongo 1.3+, потому что ему нужна функция findandmodify. Если вы работаете в Ubuntu, последняя версия в репозитории - 1.2, тогда она не работает.

Может быть, вы также должны установить BROKER_VHOST = "dbname"

Держите меня в курсе, если это работает

...