main.module.ts (microservice application)
import { DynamicModule, Module } from '@nestjs/common';
import { ModuleRef, RouterModule, Routes } from '@nestjs/core';
import { ClientsModule, Transport } from '@nestjs/microservices';
import { AppService } from './app.service';
import { ConfigService, ConfigModule as DotEnvConfigModule } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';
import * as Joi from 'joi';
import { HealthModule } from './health/health.module';
import { HealthCheckModule, HealthCheckModuleOptions } from '@myscope/health-check';
let typeOrmModule: DynamicModule;
const routes: Routes = [
{
path: '/configs',
module: ConfigModule
},
{
path: '/health',
module: HealthCheckModule
}
];
@Module({
imports: [
DotEnvConfigModule.forRoot({
envFilePath: ['config/.env', 'config/.env.global'],
isGlobal: true,
validationSchema: Joi.object({ ... })
}),
RouterModule.register(routes),
ClientsModule.registerAsync([ ... ]),
(typeOrmModule = TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: (configService: ConfigService) => ({
type: 'mariadb',
host: configService.get('MS_DB_HOST'),
...
}),
inject: [ConfigService]
})),
HealthCheckModule.registerAsync(
{
useFactory: () => {
const healthCheckModuleOptions: HealthCheckModuleOptions = {
checkDatabase: typeOrmModule.module,
checkRabbitMq: {
transport: Transport.RMQ,
options: {
queue: 'GID_MS_REVERSE_PROXY',
queueOptions: {
durable: false
},
},
}
};
return healthCheckModuleOptions;
}
}
),
],
providers: [AppService]
})
export class AppModule {}