使用node-celery(MeteorJS)和ampq后端时,Celery不返回任何结果

时间:2014-01-07 23:03:58

标签: python node.js meteor celery amqp

我刚开始使用Celery,其中Celery工作程序是用Python编写的,任务是使用node-celery从node / Meteor发送的。

为什么result没有返回client.call()? Python worker控制台显示该任务已被发送并成功处理。但是readypending似乎没有发生任何事件!

使用Celery 3.1.7,RabbitMQ 3.2.2,node-celery 0.1.1,Meteor 0.7.0.1

节点

var celery = Meteor.require('node-celery'),
    client = celery.createClient({
        CELERY_BROKER_URL: 'amqp://guest:guest@localhost:5672//',
        CELERY_RESULT_BACKEND: 'amqp://',
        CELERY_TASK_SERIALIZER: 'json',
        CELERY_RESULT_SERIALIZER: 'json'
    });

client.on('error', function(err) {
    console.log(err);
});

client.on('connect', function() {
    console.log('Connected')

    var results = client.call('tasks.echo', ['Hello world'], function(result) {
        console.log('results:' + result);
    });

    results.on('pending', function(result) {
        console.log('pending: ' + result)
    });

    results.on('ready', function(result) {
        console.log(result)
    });
});

输出

Connected

2 个答案:

答案 0 :(得分:3)

编辑:

您现在可以在氛围中找到我的celery package,或者只使用mrt install celery

进行安装

我已经经历了设置这个问题的痛苦,但已经走到了另一边。

我不得不分支node-celeryhttps://github.com/nathan-muir/node-celery)和node-amqphttps://github.com/nathan-muir/node-amqp)以创建可行的版本。

我把所有这些都装进了一个流星包装 - 但是我还没有把所有东西都清理干净以供一般消费。 (https://github.com/nathan-muir/meteor-celery)。我想用Fibers / Futures包装它而不是留下回调样式(拉请求欢迎。

包从Meteor.settings.celery读取,因此创建一个设置文件,如:

{
  "celery": {
    "CELERY_BROKER_URL": "amqp://guest@localhost:5672//",
    "CELERY_RESULT_BACKEND": "amqp",
    "CELERY_SEND_TASK_SENT_EVENT": true
  }
}

meteor --settings path/to/settings.json

启动流星

我也经营我的客户&已启用事件的工作人员(celery worker -E --config=xx),因此我可以使用芹菜监控工具(以及我自己的自定义cloudwatch统计监控工具https://github.com/nathan-muir/celery-cloudwatch

如果您还有其他问题,请随时在评论中提问。

答案 1 :(得分:0)

我没有使用Meteor,但我遇到了mvn archetype:create的类似问题。希望这将有助于其他人偶然发现这个问题。

在我的情况下,我可以通过在celeryconfig.py文件中添加以下内容来解决它

com-byteslounge-jar/
com-byteslounge-jar/pom.xml
com-byteslounge-lib/
com-byteslounge-lib/pom.xml
pom.xml

来自nodejs的node-celery调用如下所示:

node-celery