2011-01-24 37 views
5

Tôi đang cố gắng sử dụng MongoDB làm hàng đợi thư cho Celery (trong một ứng dụng Django). Phiên bản phát triển hiện tại của Celery (2.2.0rc2) là nghĩa vụ cho phép bạn làm điều này, nhưng tôi dường như không thể có được bất kỳ công nhân nào để nhận nhiệm vụ tôi đang tạo ra.Sử dụng MongoDB làm hàng đợi thư cho Celery

phiên bản: cần tây v2.2.0rc3
MongoDB 1.6.5
pymongo 1,9
django-cần tây 2.2.0rc2

Trong thiết lập của tôi, tôi có:

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() 

tôi đã tạo tệp tasks.py thử nghiệm như sau:

from celery.decorators import task 

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

Nếu tôi đốt cháy cần tây trong nền, nó có vẻ như bắt đầu bình thường. Sau đó, tôi mở vỏ trăn và chạy như sau:

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

Vấn đề là không có công nhân nào nhận nhiệm vụ. Tôi có thiếu thiết lập hay gì đó không? Làm cách nào để chỉ cần cần tây vào hàng đợi tin nhắn?

+0

Ứng dụng trong ứng dụng đã cài đặt chưa? Cần tây trở lại trong nhật ký của nó là gì nếu có gì? Một lý do phổ biến mà .ready() sẽ trả về False khi nó thực sự không nên là bởi vì các nhiệm vụ không được nhận ra, Celery sẽ nói điều gì đó như "Unknown task ignored: ...." – Bartek

+0

Bạn đã bao giờ làm việc này chưa? Tôi gặp vấn đề tương tự – Nathan

+0

Tôi không, thật không may. – Joe

Trả lời

0

Hãy nhớ rằng Kombu chỉ hoạt động với mongo 1.3+ vì nó cần chức năng findandmodify. Nếu bạn đang sử dụng ubuntu phiên bản cuối cùng trong kho lưu trữ là 1.2, không hoạt động.

Có lẽ bạn cũng phải thiết lập BROKER_VHOST = "dbname"

Keep me đăng nếu nó hoạt động

0

Hãy chắc chắn để thêm video này vào các thiết lập của bạn, hoặc người lao động không thể tìm thấy công việc và sẽ không âm thầm.

CELERY_IMPORTS = ("namespace",) 
0

Tôi đã gặp vấn đề tương tự nhưng khi tôi nâng cấp lên cần tây 2.3.3 mọi thứ hoạt động như sự quyến rũ.

2

Chúng tôi đã gặp vấn đề tương tự. Mặc dù tài liệu cho biết tất cả các tác vụ phải được đăng ký tại Celery bằng cách gọi

import djcelery 
djcelery.setup_loader() 

nó không hoạt động đúng cách. Do đó, chúng tôi vẫn sử dụng cài đặt

CELERY_IMPORTS = ('YOUR_APP.tasks',) 

trong settings.py. Ngoài ra, hãy chắc chắn bạn khởi động lại Celery nếu bạn thêm một nhiệm vụ mới vì Celery phải đăng ký các tác vụ khi nó khởi động lần đầu tiên.

Django, Celerybeat and Celery with MongoDB as the Broker

Các vấn đề liên quan