Обработчик задачи в Nest
Задачи уже попадают в Redis, но без класса, который их забирает, очередь только растёт. Nest не угадает, какой код должен сработать при появлении новой записи.
Класс помечают связью с именем
очереди и наследуют
WorkerHost из пакета
@nestjs/bullmq. Метод
process получает объект
задачи и выполняет работу.
Такой класс регистрируют
в провайдерах модуля, иначе
фреймворк не поднимет
обработчик при старте.
Покажем на примере постов:
import { Processor, WorkerHost } from '@nestjs/bullmq';
import { Job } from 'bullmq';
@Processor('posts')
export class PostProcessor extends WorkerHost {
lastJobName = '';
async process(job: Job) {
this.lastJobName = job.name;
}
}
Тот же класс указывают в провайдерах рядом с сервисом, который ставит задачи:
import { Module } from '@nestjs/common';
import { BullModule } from '@nestjs/bullmq';
import { PostProcessor } from './post.processor.js';
import { PostService } from './post.service.js';
@Module({
imports: [
BullModule.forRoot({
connection: {
host: 'localhost',
port: 6379,
},
}),
BullModule.registerQueue({
name: 'posts',
}),
],
providers: [PostService, PostProcessor],
})
export class AppModule {}
Опишите WorkerProcessor,
который сохраняет имя последней
задачи в поле класса, и подключите
его к корневому модулю.