使用MongoDB作为Celery的消息队列

时间:2011-01-24 19:13:42

标签: django mongodb message-queue rabbitmq celery

我正在尝试使用MongoDB作为Celery的消息队列(在Django应用程序中)。 Celery(2.2.0rc2)的当前开发版本应该允许你这样做,但我似乎无法让任何工作人员去接受我正在创建的任务。

版本: 芹菜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()

我已经创建了一个test tasks.py文件,如下所示:

from celery.decorators import task

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

如果我在后台开启芹菜,它似乎正常启动。然后我打开一个python shell并运行以下命令:

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

问题是没有工人接过任务。我错过了一个设置还是什么?如何将芹菜指向消息队列?

4 个答案:

答案 0 :(得分:2)

我们遇到了同样的问题。虽然文档说所有任务都应该通过调用

在Celery中注册
import djcelery
djcelery.setup_loader()

它无法正常工作。所以,我们仍然使用

CELERY_IMPORTS = ('YOUR_APP.tasks',) 
在settings.py中设置

。此外,如果添加新任务,请确保重新启动Celery,因为Celery必须在首次启动时注册任务。

Django, Celerybeat and Celery with MongoDB as the Broker

答案 1 :(得分:0)

请记住,Kombu只能使用mongo 1.3+,因为它需要findandmodify功能。 如果你在ubuntu上,那么存储库中的最后一个版本是1.2,而不是工作。

也许你还要设置 BROKER_VHOST =“dbname”

如果有效,请让我发布

答案 2 :(得分:0)

请务必将此添加到您的设置中,否则工作人员无法找到任务,并且会无声地失败。

CELERY_IMPORTS = ("namespace", )

答案 3 :(得分:0)

我有同样的问题但是当我升级到芹菜2.3.3时,一切都像魅力一样。