У меня есть nodejs на сервере ядра приложений Google, но мне нужно выполнить некоторые фоновые задачи сразу после отправки ответа пользователю. Я использовал приведенный ниже пример кода с nodejs child-process
, как описано здесь , но он хорошо работает только при локальном тестировании, но не работает в google app engine.
let {fork} = require('child_process');
const forked = fork('./worker.js');
router.post('/endpoint', (req, res) => {
let options = req.body.options;
let isResponded = false;
async_helper.doWork(options).then((s) => {
let reply = JSON.stringify(s);
isResponded = true;
res.status(200).send(reply).end();
return null
}).then(value => {
//This is the long task of sending email
forked.send(value);
return null
}).catch(err => {
console.log(err);
if (!isResponded) {
let errr = err;
res.status(500).send('Failed').end();
}
return null
});
});
Каков наилучший способ реализации таких задач в производственном приложении ? Почему дочерний процесс не работает в App Engine? Должен ли я использовать очереди задач?
Очередь задач:
Я также пробовал очередь задач после описанной выше проблемы, но я не могу различить конечную точку обработчика очереди задач и конечную точку моего сервера, поскольку этот официальный документ также указывает, что обработчик также прослушивает порт, так же, как мой существующая app.js
точка входа.
Значит ли это, что та же самая app.js
является точкой входа в очередь задач?
или это означает, что точка входа в очередь задач является еще одним "сервером" в обработчике приложений?
В течение нескольких часов я не нашел четкого руководства.