Код Middle Кеш и очереди обновлено
Очередь задач с ретраями и dead letter
Условие
Напиши async processJobs(jobs, handler, { concurrency, maxAttempts }). jobs: массив { id, data }. Одновременно выполняется не больше concurrency вызовов handler(data, attempt). Упавшая задача повторяется (попытка +1), пока число попыток не достигнет maxAttempts; после этого она попадает в dead letter.
Вернуть { done: [id...], dead: [{ id, error }] }, где done и dead отсортированы по id по возрастанию, а error это сообщение последней ошибки.
Что проверяют тесты
всё успешно
ретрай до успеха
исчерпал попытки: dead letter с последней ошибкой
concurrency соблюдается
пустой список
maxAttempts = 1: без повторов
Как подойти
Подсказки: 2
- Общая очередь и N воркеров, как в
mapLimit. - Упавшую задачу клади в конец очереди с
attempt + 1.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.