django - 使用 MongoDB 作为 Celery 的消息队列

标签 django mongodb message-queue rabbitmq celery

我正在尝试使用 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 shell 并运行以下命令:

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

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

最佳答案

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

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

它没有正常工作。所以,我们还是用了

CELERY_IMPORTS = ('YOUR_APP.tasks',) 

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

Django, Celerybeat and Celery with MongoDB as the Broker

关于django - 使用 MongoDB 作为 Celery 的消息队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4786075/

相关文章:

django - sqlite数据库在推送到heroku服务器(django)时未迁移到postgresql

mongodb - 在单个 Ubuntu 机器上为 MongoDB 配置主从配置

c - C中通过消息队列发送文件出错?

c - 为什么在 POSIX 中创建消息队列时出现错误 "Cannot Allocate Memory"?

django - 如何在django中实现拖放上传文件,而我已经实现了简单的文件上传

Python 社交验证 : How to define a different username scheme?

python - 在运行 centos/whm 的服务器中更新 python?

javascript - 您如何在同一个 Mongoose.js 查询中使用 $and、$or、$exists?

java - GridFSDownloadStream无法读取所有数据

linux - POSIX 消息队列 linux