2011-01-24 26 views
5

我試圖使用MongoDB作爲Celery的消息隊列(在Django應用程序中)。 Celery(2.2.0rc2)的當前開發版本應該可以讓你做到這一點,但我似乎無法讓任何工作人員去完成我正在創建的任務。使用MongoDB作爲Celery的消息隊列

版本: 芹菜v2.2.0rc3
的MongoDB 1.6.5
pymongo 1.9
Django的芹菜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 

如果我在後臺啓動芹菜,它似乎正常啓動。然後我打開一個python shell並運行以下代碼:

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

問題是沒有工作人員選擇任務。我錯過了一個設置或什麼?我如何將芹菜指向消息隊列?

+0

該應用程序是否安裝了應用程序?如果有什麼東西,芹菜回來的日誌是什麼? .ready()將返回False的一個常見原因是因爲任務未被識別,Celery會說「未知任務被忽略:......」 – Bartek 2011-03-01 02:44:56

回答

0

請記住,Kombu僅適用於mongo 1.3+,因爲它需要功能findandmodify。 如果你在Ubuntu上,版本庫中的最後一個版本是1.2,比不起作用。

也許你還設置 BROKER_VHOST =「DBNAME」

隨時通知我,如果它的工作原理

0

一定要添加到您的設置,或者工人找不到工作和意志默默地失敗。

CELERY_IMPORTS = ("namespace",) 
0

我有同樣的問題,但當我升級到芹菜2.3.3一切工作像一個魅力。

2

我們有同樣的問題。雖然文檔說,所有任務應通過呼籲在芹菜註冊

import djcelery 
djcelery.setup_loader() 

它無法正常工作。因此,我們仍然使用settings.py中的

CELERY_IMPORTS = ('YOUR_APP.tasks',) 

設置。此外,確保在添加新任務時重新啓動Celery,因爲Celery必須在第一次啓動時註冊任務。

Django, Celerybeat and Celery with MongoDB as the Broker