我目前正在使用 express js 开发 API。我想编写一个函数,将分析保存在 DB 中,但我应该能够以火灾和忘记的方式调用该函数。该函数应该接受参数并完成它的工作。这应该像一个单独的线程一样工作,并且当前代码执行不应该等待它的响应。例如 Akka Actors 在 Java 中的工作方式。有人可以建议一种方法或一些链接来参考吗?
问问题
3521 次
2 回答
2
Node is async by default. Just send your response outside of the db query callback:
app.get("/ping", function (req, res) {
// fire
dbConnection.query("UPDATE analytics SET count = count + 1", function(err, result) {
// forget
});
res.send("Pong");
});
于 2016-01-11T08:05:56.880 回答
1
您可以将您的信息添加到某种 MessageQueue,然后启动另一个进程,该进程将侦听 MQ 并相应地处理消息。
这并不是 Actor 的具体工作方式,但这就是通常在 nodejs 领域中的工作方式。
例如,您可以使用kue或AWS SQS或Google 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);
});
于 2016-01-11T07:41:26.110 回答