ExpressJs(NodeJs)Fire&忘记

时间:2016-01-11 07:39:20

标签: javascript node.js fire-and-forget

我目前正在快递js中开发API。我想编写一个函数来保存分析在DB中,但我应该能够以火和忘记的方式调用该函数。该函数应该接受参数并完成其工作。这应该像一个单独的线程一样工作,当前的代码执行不应该等待它的响应。例如,Akka Actors在Java中的工作方式。有人可以建议一种方法来做或者引用一些链接吗?

2 个答案:

答案 0 :(得分:2)

默认情况下,节点是异步的。只需在db查询回调之外发送响应:

app.get("/ping", function (req, res) {
    // fire
    dbConnection.query("UPDATE analytics SET count = count + 1", function(err, result) {
        // forget
    });

    res.send("Pong");
});

答案 1 :(得分:1)

您可以将您的信息添加到某种MessageQueue,然后启动另一个进程,该进程将监听MQ并相应地处理消息。

演员的工作方式并不特别,但这通常是如何在nodejs领域完成的。

例如,您可以使用kueAWS SQSGoogle PubSub或任何其他可用解决方案

// example with kue
// http-process.js
var kue = require('kue');
var queue = kue.createQueue();

... 
app.post('/something-somewhere', (req, res) => {
  var job = queue.create('event', {
    data: 'analytics, data',
    median: 5.3,
  }).save( function(err){
    if( !err ) return next(err); 

    res.send('ok');
  });
});

// event-processor.js
var kue = require('kue');
var queue = kue.createQueue();

queue.process('event', function(job, done){
  someKindOfORM.myEventsTable.insert({
    job.data
  }).notify(done);
});