Skip to content

Instantly share code, notes, and snippets.

@shirish87
Created February 15, 2020 20:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shirish87/07cd2f7b7baf6d90d7c22965fb868f45 to your computer and use it in GitHub Desktop.
Save shirish87/07cd2f7b7baf6d90d7c22965fb868f45 to your computer and use it in GitHub Desktop.
Propagate NATS connection error to microservice init
import { Module, INestMicroservice, Logger } from '@nestjs/common';
import { WorkerService } from './worker.service';
import { WorkerController } from './worker.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { NestFactory } from '@nestjs/core';
import { Transport } from '@nestjs/common/enums/transport.enum';
@Module({
imports: [TypeOrmModule.forRoot()],
providers: [WorkerService],
controllers: [WorkerController],
})
export class WorkerModule {
private static readonly logger = new Logger(WorkerModule.name);
static async startMicroservice(siteDataWorkerKey: string): Promise<INestMicroservice> {
const app = await NestFactory.create(WorkerModule);
const service = WorkerModule.patchNatsMicroservice(app.connectMicroservice({
transport: Transport.NATS,
options: {
url: 'nats://localhost:4222',
queue: siteDataWorkerKey,
},
}));
await app.startAllMicroservicesAsync();
await app.init();
return service;
}
private static patchNatsMicroservice(service: INestMicroservice): INestMicroservice {
const server = (service as any).server;
server.listen = (callback: (err?: Error) => void) => {
server.natsClient = server.createNatsClient();
server.natsClient.once('error', callback);
server.handleError(server.natsClient);
server.start(callback);
};
return service;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment