我正在NestJS中创建一个微服务,现在我想使用RabbitMQ向另一个服务发送消息。
我的问题是:是否可以基于.env
变量导入RabbitmqModule?例如:USE_BROKER=false
.如果该变量为false,则不导入该模块?
RabbitMQ被导入到下面的GraphQLModule中。
@Module({
imports: [
GraphQLFederationModule.forRoot({
autoSchemaFile: true,
context: ({ req }) => ({ req }),
}),
DatabaseModule,
AuthModule,
RabbitmqModule,
],
providers: [UserResolver, FamilyResolver, AuthResolver],
})
export class GraphQLModule {}
家兔mq模块:
import { Global, Module } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { RabbitMQModule } from '@golevelup/nestjs-rabbitmq';
import { UserProducer } from './producers/user.producer';
@Global()
@Module({
imports: [
RabbitMQModule.forRootAsync(RabbitMQModule, {
useFactory: async (config: ConfigService) => ({
exchanges: [
{
name: config.get('rabbitMQ.exchange'),
type: config.get('rabbitMQ.exchangeType'),
},
],
uri: config.get('rabbitMQ.url'),
connectionInitOptions: { wait: false },
}),
inject: [ConfigService],
}),
],
providers: [UserProducer],
exports: [UserProducer],
})
export class RabbitmqModule {}
2条答案
按热度按时间iklwldmw1#
我认为推荐的方法是使用NestJS中的DynamicModule特性。
在此解释如下:https://docs.nestjs.com/fundamentals/dynamic-modules
只需在register函数中检查环境变量并返回Module对象。
zfciruhq2#
我在一个小型的Nest项目中尝试了一个简单的变通方法,效果很好。看看:
我在我的env/config中创建了一个“importModule”,并用true和false测试了它。如果为true,我的Poop模块得到部署,否则它不部署,只部署其他模块。
你能在你的项目中尝试同样的方法吗?