#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
}
}