Введение в очереди в Nest
Тяжёлый шаг после записи данных удлиняет ответ клиенту: браузер ждёт, пока письмо уйдёт или файл обработается, хотя подтверждение сохранения уже можно отдать сразу. Повтор того же шага с другого адреса снова встраивает его в метод страницы.
Такой шаг переносят в очередь: сервис кладёт описание работы в хранилище Redis, а отдельный обработчик забирает задачи, когда приложение готово. Клиент получает быстрый ответ, а длинная часть идёт в фоне внутри процесса NodeJS.
В Nest для BullMQ подключают пакет
@nestjs/bullmq. Корневой
модуль настраивает соединение
с Redis, регистрирует именованные
очереди, сервисы ставят задачи,
а классы с обработчиком наследуют
WorkerHost и выполняют
полученную работу. Данные задачи
лежат в Redis, поэтому после
перезапуска необработанные записи
можно продолжить.
Дальше разберём подключение к Redis на локальном порту, постановку задачи из сервиса, класс обработчика, полезную нагрузку, отложенный старт, повтор при сбое и строку в журнале по событию задачи.