У меня есть веб-приложение Node.js, в котором я выполняю некоторые сторонние API-вызовы, создавая очень длительное время запроса / ответа.Это приводит к тому, что время ожидания моего Heroku составляет ~ 50% времени, и, согласно документам Heroku, нет никакого способа изменить это жесткое ограничение.Они рекомендуют использовать фоновые процессы для масштабирования, и это кажется подходящим решением проблемы (они предоставляют примеры и рекомендуют использовать https://optimalbits.github.io/bull/).
. Я следую простому примеру, представленному Heroku здесь https://github.com/heroku-examples/node-workers-example), однако, ради меня, этот пример слишком прост.
У меня есть файл с именем worker.js
, который будет моим рабочим. Есть функция start()
, которая создает очередь и сообщаеточередь, как обрабатывать задания. Моя проблема в том, что я буду добавлять задания в очередь через свои конечные точки API, и я хотел бы, чтобы каждое задание выполняло определенные функции для выполнения своей задачи.
Вотstart()
function:
function start(){
let workQueue = new Queue('work', REDIS_URL);
workQueue.process(maxJobsPerWorker, async (job,data) => {
return {message: "Finished"};
});
Я хотел бы выполнить различные функции в логическом блоке вместо возврата готового сообщения. Например, я хотел бы сделать что-то вроде этого:
function start(){
let workQueue = new Queue('work', REDIS_URL);
workQueue.process(maxJobsPerWorker, async (job,data) => {
return someFunction();
});
Опять же, этого было бы достаточно просто, если бы мне нужно было запускать одну и ту же функцию каждый раз, но я буду запускать несколько разныхфункции, которые используют разные входы.Так что someFunction
является переменной, а не константой.
Я думал о передаче имени функции для непосредственного выполнения в задание, что-то вроде этого: let job = await workQueue.add({ callback: functionName });
Однако я могудействительно не скажу, работает ли это или нет ... Как я могу получить это и работает?