我刚开始使用Celery,其中Celery工作程序是用Python编写的,任务是使用node-celery
从node / Meteor发送的。
为什么result
没有返回client.call()
? Python worker控制台显示该任务已被发送并成功处理。但是ready
和pending
似乎没有发生任何事件!
使用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
答案 0 :(得分:3)
编辑:
您现在可以在氛围中找到我的celery package,或者只使用mrt install celery
我已经经历了设置这个问题的痛苦,但已经走到了另一边。
我不得不分支node-celery
(https://github.com/nathan-muir/node-celery)和node-amqp
(https://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