43 lines
1.1 KiB
TypeScript
43 lines
1.1 KiB
TypeScript
|
|
import { Module, Global } from '@nestjs/common';
|
||
|
|
import { BullModule } from '@nestjs/bullmq';
|
||
|
|
import { ConfigModule, ConfigService } from '@nestjs/config';
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 队列模块 - 基础设施层
|
||
|
|
* 基于 NestJS 官方文档实现
|
||
|
|
* 参考: https://docs.nestjs.cn/techniques/queues
|
||
|
|
* 使用 BullMQ 作为队列引擎
|
||
|
|
*/
|
||
|
|
@Global()
|
||
|
|
@Module({
|
||
|
|
imports: [
|
||
|
|
BullModule.forRootAsync({
|
||
|
|
imports: [ConfigModule],
|
||
|
|
inject: [ConfigService],
|
||
|
|
useFactory: async (configService: ConfigService) => {
|
||
|
|
const redisConfig = configService.get('redis');
|
||
|
|
|
||
|
|
return {
|
||
|
|
connection: {
|
||
|
|
host: redisConfig.host,
|
||
|
|
port: redisConfig.port,
|
||
|
|
password: redisConfig.password,
|
||
|
|
db: redisConfig.db,
|
||
|
|
},
|
||
|
|
defaultJobOptions: {
|
||
|
|
removeOnComplete: 10,
|
||
|
|
removeOnFail: 5,
|
||
|
|
attempts: 3,
|
||
|
|
backoff: {
|
||
|
|
type: 'exponential',
|
||
|
|
delay: 2000,
|
||
|
|
},
|
||
|
|
},
|
||
|
|
};
|
||
|
|
},
|
||
|
|
}),
|
||
|
|
],
|
||
|
|
exports: [BullModule],
|
||
|
|
})
|
||
|
|
export class QueueModule {}
|