工作人员可以将消息发送回生产者

时间:2013-03-20 21:08:44

标签: node.js queue message-queue worker job-queue

我有一个具有以下情况的NodeJS应用程序:我收到用户的请求,要求计算需要使用非常复杂的数学公式的东西。目前,我在那一刻运行整个过程,计算出值,然后将其发送回用户。不幸的是,这不是非常异步友好的:)

我想要做的是在后台运行整个操作,一旦任务完成,工作人员会回复给我任何计算值,然后我将其发回给用户。

我一直在查看各种工作队列,包括KueCeleryResqueBeanstalk,但它们似乎都没有提供此功能。它们非常适合发送电子邮件或运行任何不需要获得某种价值的工作,只是一个简单的成功与否,但似乎没有任何东西允许worker实际上将自定义消息发送回创建该任务的原始生成器。

上述队列中没有一个支持这个,我说错了吗?如果是这样,请指出我可以在文档中学习如何使用此功能。否则,你能指点我支持这项功能的其他人吗?

2 个答案:

答案 0 :(得分:1)

您应该从专用队列中获取结果,然后将其推送给用户 使用celery作为任务队列管理器和长轮询或套接字,以便将操作结果返回给用户 在nodeJS app中,您可以使用node-celery https://github.com/mher/node-celery或直接在celery预留队列中插入消息 例如

var amqp = require('amqp');
var connection = amqp.createConnection({
  host: 'localhost',
  port: 5672
});
connection.on('ready',function(){
  connection.publish('celery', {id:uuid.v4(), task:'yourapp.tasks.usefultask', args:['firstArg','secondArg'], kwargs:{}},{
      'contentType': 'application/json'
      });
    });

答案 1 :(得分:0)

您可以将Celery与https://github.com/mher/node-celery

一起使用

node-celery允许对任务进行排队并接收执行结果

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

client.on('connect', function() {
    client.call('factorial', [1000000], function(result) {
        console.log(result);
    });
});