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);
});
Другие вопросы по тегам