nestjs - 尝试在 NestJS 中注入(inject) Bull Queue 时无法解决依赖关系

标签 nestjs bull-queue

我正在尝试使用 Bull/Redis 实现 Nodemailer 来处理 NestJS 中的电子邮件类型的任务。
我有一个名为 EmailService 的共享模块将作业添加到我的队列中,为此,它需要注入(inject) Queue来自 'bull' .

Nest can't resolve dependencies of the EmailService (?). Please make sure that the argument BullQueue_mailqueue at index [0] is available in the SharedModule context.


我的结构
├── src
|  ├── app.module.ts
|  ├── config
|  |  └── nodemailer
|  |     ├── nodemailer.module.ts
|  |     ├── nodemailer.service.ts
|  └── modules
|     ├── modules that imports the SharedModule to send emails.
|  └── shared
|     ├── processors
|     |  └── email.processor.ts
|     ├── services
|     |  └── email
|     ├── shared.module.ts
应用模块
@Module({
  imports: [
    NodemailerModule,
    // Al other modules (functionalities of my application that imports the SharedModule)
  ],
})
export class AppModule {}
nodemailer.module
@Module({
  imports: [
    MailerModule.forRootAsync({
      useClass: NodemailerService,
    }),
    BullModule.registerQueueAsync({
      useClass: NodemailerService,
    }),
  ],
  exports: [NodemailerService, BullModule], // <- Exports BullModule
  providers: [NodemailerService],
})
export class NodemailerModule {}
节点邮件服务
@Injectable()
export class NodemailerService implements BullOptionsFactory {
  constructor() {}

  createBullOptions(): Promise<BullModuleOptions> | BullModuleOptions {
    return {
      name: 'myqueue',
      redis: {
        host: 'localhost',
        port: 6379,
      },
    };
  }

}
现在这是我的 EmailService,它是 SharedModule 的一部分。
import { Injectable } from '@nestjs/common';
import { InjectQueue } from '@nestjs/bull';
import { Queue } from 'bull';

@Injectable()
export class EmailService {

  constructor(
    @InjectQueue('myqueue')
    private readonly mailQueue: Queue,
  ) {}

}
共享模块
@Module({
  imports: [NodemailerModule], // < imports this because it has the Bull configuration as we saw above
  exports: [EmailService],
  providers: [EmailService, EmailProcessor],
})
export class SharedModule {}
我试图按照以下步骤操作:
  • https://firxworx.com/blog/coding/nodejs/email-module-for-nestjs-with-bull-queue-and-the-nest-mailer/
  • Implementing Bull Queue in Typescript

  • 我不明白为什么我的 EmailService无法注入(inject) BullQueue 依赖项。
    我在这里缺少什么?

    最佳答案

    注入(inject)队列的模块需要导入队列注册。 IE。folder/some.module.ts

    @Module({
      imports: [
        BullModule.registerQueue({
          name: 'some-queue',
        }),
      ],
      providers: [SomeService],
    })
    export class SomeModule {}
    
    然后在 SomeServicefolder/some.service.ts
    constructor(
      @InjectQueue('some-queue') private someQueue: Queue,
    ) {}
    

    关于nestjs - 尝试在 NestJS 中注入(inject) Bull Queue 时无法解决依赖关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66494091/

    相关文章:

    node.js - 如何开 Jest 模拟 Nestjs 导入?

    graphql - 无法将类型 'object' 用于 Type-GraphQL 字段类型

    node.js - 向nestjs swagger添加服务器出现权限错误

    javascript - 有没有办法在 NestJS 中使用静态方法和依赖注入(inject)?

    nestjs - 捆绑一个 NestJS + TypeORM 应用程序(使用 webpack)

    node.js - Node 牛队列错误: Missing process handler for job type JOB_NAME

    node.js - 使用 Bull 队列如何重试具有更高优先级的失败作业?

    node.js - 使用 NodeJS Bull Queue 独立处理器