NodeJS Nest.js BullQueue中的@Processor不会拾取作业

cidc1ykv  于 2023-11-17  发布在  Node.js
关注(0)|答案(1)|浏览(151)

我尝试在nest.js中使用BullQueue包实现一个队列。我有两个队列,一个是文件队列,另一个是电子邮件队列。
在缩略图上传后,我使用文件队列在后台重新生成缩略图。电子邮件队列发送电子邮件。问题是我的文件队列工作得很好,但我创建的电子邮件队列给我的结果不一致。有时作业会被@Process('JobName')函数拾取,有时不会。
更重要的是,我注意到当问题发生时,我试图删除dist文件夹并重新启动服务器,重新生成dist目录。它工作,直到它没有经过几次试验。
这是我的文件夹结构。

my-nest-app/
├─ src/
│  ├─ bull-queue/
│  │  ├─ bull-queue.module.ts
│  │  ├─ file-queue/
│  │  │  ├─ file-queue-producer.service.ts
│  │  │  ├─ file-queue-consumer.service.ts
│  │  ├─ email-queue/
│  │  │  ├─ email-producer.service.ts
│  │  │  ├─ email-processor.service.ts

字符串
bull-queue.module.ts

export enum BullQueue {
    FileQueue = 'file-queue',
    EmailQueue = 'email-queue',
}

@Global()
@Module({
    imports: [
        BullModule.forRoot({
            redis: {
                host: process.env.REDIS_HOST,
                port: parseInt(process.env.REDIS_PORT) || 6379
            }
        }),
        BullModule.registerQueue(
            { name: BullQueue.FileQueue },
            { name: BullQueue.EmailQueue }
        ),
        ProjectModule,
        FileModule
    ],
    providers: [
        BullQueueService,
        FileQueueConsumerService,
        FileQueueProducerService,
        EmailProcessorService,
        EmailProducerService
    ],
    controllers: [],
    exports: [FileQueueProducerService, EmailProducerService]
})
export class BullQueueModule {}


email-producer.service.ts

export enum EmailJobs {
    PasswordReset = 'password_reset',
}

@Injectable()
export class EmailProducerService {
    constructor(@InjectQueue(BullQueue.EmailQueue) private queue:Queue){}

    async password_reset_email(payload: PasswordResetPayload){
        await this.queue.add(EmailJobs.PasswordReset, payload);
    }

}


email-processor.service.ts

@Processor(BullQueue.EmailQueue)
export class EmailProcessorService {

    constructor(
        private readonly loggerService: LoggerService,
        private readonly helperService: HelperService
    ) {}


    @Process(EmailJobs.PasswordReset)
    async password_reset(job: Job<PasswordResetPayload>) {
        console.log('password_reset Job Processor')
    }
}


我想知道我是否违反了任何设计原则,或者这只是队列包管理器的问题。

aoyhnmkz

aoyhnmkz1#

他们忘了在文档中提到一件事。
处理器也需要添加到APP_PROVIDERS中。NestJS需要知道使用的对象。

相关问题