Условная повторная попытка неудачных заданий с использованием Булл в Node.js

#node.js #queue #jobs

#node.js #очередь #Вакансии

Вопрос:

Я знаю, что мы можем повторить неудачные задания в Bull, используя backoff атрибут Bull , приведенный ниже

 var Queue = require('bull');
var myQueue = new Queue('myQueue');

runQueryQueue
    .add(data, {
      jobId: uid,
      attempts: 10,
      backoff: {
        type: 'exponential', 
        delay: 2000, 
      },
      stackTraceLimit: 100,
    })
    .then((result) => {})
    .catch(console.log);
 

Но я хочу повторить попытку только тогда, когда причины сбоя заслуживают повторной попытки — например, тайм-ауты, ограничения скорости и т.д., и не повторять попытку, когда ошибки связаны с пользовательскими вводами и т.д.

Как я могу проверить сообщение об ошибке сбоя и решить повторить попытку?

Ответ №1:

Вы можете пометить задание как завершенное, например, не выдавать ошибки, но записать данные об ошибках в результат завершения задания. Результат может быть обработан другим способом, если есть какие-либо признаки ошибки.

 async function jobProcess(job) {
  if (doNotRetryError) {
    return doNotRetryError
  } else if (anyOtherError) {
    throw new Error('retry')
  } else {
    return {success: true}
  }
}

async function jobCompleted(job, result) {
  if (result instanceof Error) {
    // some error happened, but job shouldn't be retried
  } else {
    // job completed
  }
}