[英]Implementing Bull Queue in Typescript
我嘗試在 Typescript 和 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();
}
}
快速問題:這個實現是否足以讓我的工作排隊工作?,如果不是:我必須做什么?
我最近寫了一篇似乎與您的用例有關的博客文章:
https://firxworx.com/blog/coding/nodejs/email-module-for-nestjs-with-bull-queue-and-the-nest-mailer/
一些提示:
BullModule
(來自@nestjs/bull
)。 例如,您需要配置您的隊列名稱(在您的情況下為“郵件”)並設置您的隊列。 一個常見的設置包括使用 redis 主機名和端口進行配置。user
和token
。 我的示例如下所示: await this.mailQueue.add('confirmationEmail', { user, token })
@nestjs/bull
的@Processor(QUEUE_NAME)
裝飾器(在你的例子中是@Processor('mail')
)。 處理器處理添加到隊列中的作業。sendConfirmationEmail()
來處理名為“confirmationEmail”的作業。 您可以使用@Process(JOB_NAME)
來裝飾該方法,例如@Process('confirmationEmail')
。 該方法可以接收您的有效負載。 根據我的示例,以下方法簽名將提供user
和token
: async sendConfirmationEmail(job: Job<{ user: User, token: string }>): Promise<any>
(注意Job
來自bull
package,而你不妨輸入您的回報與使用any
)。 這是您實際發送 email 的地方。@nestjs/bull
還提供了特殊的方法裝飾器,包括@OnQueueActive()
、 @OnQueueCompleted()
、 @OnQueueFailed()
。 請參閱文檔,但您可能會發現這些對日志記錄或其他目的很有用。這個想法是,當應用程序處於空閑狀態時,您的處理器會處理隊列中的作業。
您的郵件模塊可能至少有一個帶有配置的mail.module.ts
,一個將作業添加到“郵件”隊列的mail.service.ts
,以及一個mail.processor.ts
完成添加到“郵件”隊列。
NestJS 的更多文檔可在以下位置獲得:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.