5

我正在尝试使用 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()

我创建了一个测试 tasks.py 文件,如下所示:

from celery.decorators import task

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

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

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

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

4

4 回答 4

2

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

import djcelery
djcelery.setup_loader()

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

CELERY_IMPORTS = ('YOUR_APP.tasks',) 

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

以 MongoDB 作为代理的 Django、Celerybeat 和 Celery

于 2011-11-23T18:26:04.040 回答
0

请记住,Kombu 仅适用于 mongo 1.3+,因为它需要 findandmodify 功能。如果您在 ubuntu 上,存储库中的最后一个版本是 1.2,则不起作用。

也许您还必须设置 BROKER_VHOST = "dbname"

如果有效,请随时通知我

于 2011-03-01T13:17:01.627 回答
0

请务必将此添加到您的设置中,否则工作人员找不到任务并会默默失败。

CELERY_IMPORTS = ("namespace", )
于 2011-05-18T20:25:36.083 回答
0

我遇到了同样的问题,但是当我升级到 celery 2.3.3 时,一切都像魅力一样。

于 2011-10-09T18:29:09.577 回答