将BullMQ与NestJs一起使用,是否可以将配置变量作为作业名称的一部分



我正试图在nestjs/bull模块的@Process((装饰器中使用一个环境变量值,如下所示。我应该如何提供"STAGE"变量作为作业名称的一部分?

import { Process, Processor } from '@nestjs/bull';
import { Inject } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { Job } from 'bull';
@Processor('main')
export class MqListener {
constructor(
@Inject(ConfigService) private configService: ConfigService<SuperRootConfig>,
) { }
// The reference to configService is not actually allowed here:
@Process(`testjobs:${this.configService.get('STAGE')}`)

handleTestMessage(job: Job) {
console.log("Message received: ", job.data)
}
}

编辑来自Micael和Jay:的答案(如下(

Micael Levi回答了最初的问题:您不能使用NestJS ConfigModule将您的配置放入内存变量中。但是,在引导函数中运行dotenv.config((也不起作用;如果您尝试从Method Decorator中访问内存变量,则会得到未定义的值。为了解决这个问题,Jay McDoniel指出,在导入AppModule之前,必须先导入文件。所以这是有效的:

// main.ts
import { NestFactory } from '@nestjs/core';
require('dotenv').config()
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(process.env.PORT || 4500);
}
bootstrap();

由于decorator评估的工作方式,您不能在该上下文中使用this。当时,还没有为MqListener类创建实例,因此,使用this.configService是没有意义的。

您需要直接访问process.env.。因此将在该文件中调用dotenv(或者读取并解析dot-env文件的lib(。

相关内容

  • 没有找到相关文章

最新更新