ExpressJs(NodeJs) Fire & Forget
В настоящее время я занимаюсь разработкой API в Express JS. Я хочу написать функцию, которая сохраняет аналитику в БД, но я должен быть в состоянии вызвать функцию в огне и забыть путь. Функция должна принимать параметры и выполнять свою работу. Это должно работать как отдельный поток, и текущее выполнение кода не должно ждать его ответа. Например, как актеры Akka работают в Java. Может кто-нибудь предложить способ сделать это или ссылку для ссылки?
2 ответа
Узел является асинхронным по умолчанию. Просто отправьте свой ответ за пределы обратного вызова db:
app.get("/ping", function (req, res) {
// fire
dbConnection.query("UPDATE analytics SET count = count + 1", function(err, result) {
// forget
});
res.send("Pong");
});
Вы можете добавить свою информацию в какое-либо MessageQueue, а затем запустить другой процесс, который будет прослушивать MQ и обрабатывать сообщения соответствующим образом.
Не совсем так, как работают актеры, но обычно это делается в сфере 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);
});