我尝试在类型记录和NestJS中实现Bull队列,我的代码:
@Injectable()
export class MailService {
constructor(
@InjectQueue('mail')
private readonly mailQueue: Queue
) {}
async addToQueue(): Promise<void> {
this.mailQueue.add(() => {
return this.sendMail();
})
}
async sendMail(): Promise<void> {
//logic to implement
this.addToQueue();
}
}快速问题:这一实现是否足以让我的工作排队工作?如果不是:我必须做什么?
发布于 2020-07-15 23:40:38
我最近写了一篇似乎与用例有关的博客文章:
https://firxworx.com/blog/coding/nodejs/email-module-for-nestjs-with-bull-queue-and-the-nest-mailer/
以下是一些小窍门:
BullModule (从@nestjs/bull)。例如,您需要配置您的队列名(在您的情况下是“mail”)并设置您的队列。常见的设置包括使用redis主机名和端口进行配置。user和token。我的示例如下所示:await this.mailQueue.add('confirmationEmail', { user, token })@Processor(QUEUE_NAME)装饰器装饰的类,它来自@nestjs/bull (在您的例子中是@Processor('mail'))。处理器处理添加到队列中的作业。sendConfirmationEmail()。你可以用@Process(JOB_NAME)来装饰那个方法,例如@Process('confirmationEmail')。该方法可以接收您的有效负载。根据我的示例,以下方法签名将提供user和token:async sendConfirmationEmail(job: Job<{ user: User, token: string }>): Promise<any> (注意,Job来自bull包,您可能希望键入返回和使用any)。这里是您实际发送电子邮件的地方。@nestjs/bull还提供了特殊的方法装饰器,包括@OnQueueActive()、@OnQueueCompleted()、@OnQueueFailed()。请参阅文档,但您可能会发现这些文档对于日志记录或其他用途很有用。这样做的想法是,当应用程序空闲时,处理器处理队列中的作业。
您的邮件模块可能至少有一个具有配置的mail.module.ts,一个向“邮件”队列添加作业的mail.service.ts,以及一个负责完成添加到“邮件”队列中的任何作业的mail.processor.ts。
来自NestJS的更多文档可在以下网站获得:
https://stackoverflow.com/questions/62894243
复制相似问题