nestjs Queues 介绍安装配置及使用过程给出代码示例
NestJS Queues 是一个基于 NestJS 的异步任务队列插件,可以帮助我们将一些耗时、复杂的任务异步执行,以提高应用的性能和可靠性。下面是安装配置和使用过程的步骤:
- 安装依赖
npm install --save @nestjs/bull bull
- 注册模块
在 app.module.ts 中注册 BullModule:
import { Module } from '@nestjs/common';
import { BullModule } from '@nestjs/bull';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { MyQueue } from './my.queue';
@Module({
imports: [
BullModule.forRoot({
name: 'my-queue',
redis: {
host: 'localhost',
port: 6379,
},
}),
],
controllers: [AppController],
providers: [AppService, MyQueue],
})
export class AppModule {}
在上面的代码中,我们使用 BullModule.forRoot() 方法初始化了一个名为 my-queue 的队列,并指定了 Redis 数据库的连接信息。
- 创建任务
import { Injectable } from '@nestjs/common';
import { InjectQueue } from '@nestjs/bull';
import { Queue } from 'bull';
@Injectable()
export class MyQueue {
constructor(@InjectQueue('my-queue') private readonly queue: Queue) {}
async addJob(data: any) {
await this.queue.add('my-job', data);
}
async processJob() {
this.queue.process('my-job', (job, done) => {
console.log('processing job', job.data);
done();
});
}
}
在上面的代码中,我们定义了一个 MyQueue 类,使用 InjectQueue 注入了一个名为 my-queue 的队列,并实现了一个 addJob 方法和一个 processJob 方法。
addJob 方法用于添加一个任务到队列中,processJob 方法用于处理队列中的任务。在 processJob 方法中,我们使用 queue.process() 方法监听 my-job 任务,并在任务执行完成后调用 done() 方法。
- 调用任务
import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';
import { MyQueue } from './my.queue';
@Controller()
export class AppController {
constructor(
private readonly appService: AppService,
private readonly myQueue: MyQueue,
) {}
@Get()
async addJob() {
await this.myQueue.addJob({ data: 'hello world' });
return 'Job added';
}
@Get('/process')
async processJob() {
await this.myQueue.processJob();
return 'Job processed';
}
}
在上面的代码中,我们定义了一个 AppController 控制器,并注入了一个 MyQueue 实例。在控制器中,我们实现了两个路由:
addJob路由用于添加一个任务到队列中。processJob路由用于处理队列中的任务。
现在我们可以通过访问 http://localhost:3000 和 http://localhost:3000/process 来分别添加任务和处理任务了。
以上就是 NestJS Queues 的安装配置和使用过程,希望对您有所帮助。
原文地址: https://www.cveoy.top/t/topic/buqg 著作权归作者所有。请勿转载和采集!