@muzikanto/nestjs-consul
v1.0.1
Published
Nestjs module for consul
Maintainers
Readme
@muzikanto/nestjs-consul
A lightweight NestJS module for integrating the official consul npm package into your NestJS application.
Why Use This Module?
- Seamless integration with NestJS DI system
- Supports async configuration
- Multi-client support
- Clean and minimal implementation
Installation
yarn add @muzikanto/nestjs-consul
# also
yarn add consulPeer dependencies: @nestjs/common, @nestjs/core, consul
Quick Start
Synchronous Registration (forRoot)
// app.module.ts
import { Module } from "@nestjs/common";
import { ConsulModule } from "@muzikanto/nestjs-consul";
@Module({
imports: [
ConsulModule.forRoot({
host: "localhost",
port: 8500,
}),
],
})
export class AppModule {}Using the Client in a Service
import { Inject, Injectable } from "@nestjs/common";
import Consul from "consul";
import { InjectConsul } from "@muzikanto/nestjs-consul";
@Injectable()
export class RegistrationService {
constructor(@InjectConsul("test") private readonly consul: Consul) {}
async registerService() {
await this.consul.agent.service.register({
/* some config */
});
}
}Async Configuration (forRootAsync)
Useful when working with ConfigModule or external configuration providers.
Using useFactory
import { Module } from "@nestjs/common";
import { ConfigModule, ConfigService } from "@nestjs/config";
import { ConsulModule } from "@muzikanto/nestjs-consul";
@Module({
imports: [
ConfigModule.forRoot(),
ConsulModule.forRootAsync({
name: "test",
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (config: ConfigService) => ({
host: config.get<string>("CONSUL_HOST"),
port: +config.get<number>("CONSUL_PORT"),
}),
}),
],
})
export class AppModule {}Using useClass
import { Injectable } from "@nestjs/common";
import { ConsulModuleOptionsFactory } from "@muzikanto/nestjs-consul";
@Injectable()
export class ConsulConfigService implements ConsulModuleOptionsFactory {
createConsulModuleOptions() {
return {
host: process.env.CONSUL_HOST,
port: +process.env.CONSUL_PORT,
};
}
}ConsulModule.forRootAsync({
useClass: ConsulConfigService,
});Multi-Instance Support
You can register multiple OpenAI clients with different configurations.
@Module({
imports: [
ConsulModule.forRoot({
name: "primary",
host: "localhost",
port: 8500,
}),
ConsulModule.forRoot({
name: "secondary",
host: "localhost",
port: 8501,
}),
],
})
export class AppModule {}@Injectable()
export class MultiConsulService {
constructor(
@InjectConsul("primary")
private readonly primaryClient: OpenAI,
@InjectConsul("secondary")
private readonly secondaryClient: OpenAI,
) {}
}Registration
import { Module } from '@nestjs/common';
import { ConsulRegistrationModule } from '@muzikanto/nestjs-consul/register';
@Module({
imports: [
ConsulRegistrationModule.forRoot({
consulName: 'default',
name: 'users-service',
id: 'users-service-1',
address: 'localhost',
port: 3000,
tags: ['api', 'users'],
check: {
name: 'HTTP Health Check',
http: 'http://localhost:3000/health',
interval: '10s',
timeout: '5s',
},
}),
],
})
export class AppModule {}Contributing
Contributions are welcome! Please open issues or submit PRs.
Changelog
See CHANGELOG for detailed version history and updates.
