РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗jsnsSpQuRt 105 of 201 menu
◀ ▶

Повтор задачи в Nest

Внешний шаг иногда падает из-за сети или временной недоступности сервиса. Один сбой не должен навсегда убирать задачу, если повтор может пройти через секунду.

При постановке указывают attempts: сколько раз BullMQ попробует выполнить задачу. Если метод process бросает ошибку, задача возвращается в очередь до исчерпания попыток.

Покажем на примере постов:

import { Injectable } from '@nestjs/common'; import { InjectQueue } from '@nestjs/bullmq'; import { Queue } from 'bullmq'; @Injectable() export class PostService { postQueue: Queue; constructor(@InjectQueue('posts') postQueue: Queue) { this.postQueue = postQueue; } async enqueueFragile(title: string) { await this.postQueue.add( 'post-fragile', { title }, { attempts: 3 }, ); } }

Обработчик намеренно падает, пока счётчик попыток не дойдёт до трёх, и тогда завершает работу:

import { Processor, WorkerHost } from '@nestjs/bullmq'; import { Job } from 'bullmq'; @Processor('posts') export class PostProcessor extends WorkerHost { successAfterRetries = false; async process(job: Job<{ title: string }>) { if (job.attemptsMade < 2) { throw new Error('temporary failure'); } this.successAfterRetries = true; } }

Поставьте из WorkerService задачу с повторами. WorkerProcessor сначала сообщает об ошибке, а затем отмечает успех в поле класса.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить