import { ClientProxy, ClientProxyFactory, Transport } from '@nestjs/microservices'; import { IMicroserviceClients } from './microservice-clients'; import { Injectable } from '@nestjs/common'; import { ConfigService } from '@nestjs/config'; @Injectable() export class MicroserviceClientFactory implements IMicroserviceClients { private clients: Map = new Map(); constructor(private readonly config: ConfigService) { this.loadClients(); } private loadClients() { const services = this.config.get('SERVICES')?.split(',') || []; for (const service of services) { const host = this.config.get(`${service}_HOST`); const port = this.config.get(`${service}_PORT`); if (!host || !port) { continue; } const proxy = ClientProxyFactory.create({ transport: Transport.TCP, options: { host, port }, }); this.clients.set(service, proxy); } } getClient(appcode: string): ClientProxy | null { return this.clients.get(appcode) || null; } }