Aplicaciones hibridas en nestjs
Según la documentación oficial de nestjs, una aplicación es hibrida si esta utiliza dos o más tipos de fuentes. Puede combinar un servidor HTTP con un microservicio y un puerto de escucha o multiples microservicios con sus puertos de escucha.
El método createMicroService no permite crear múltiples servicios ya que estos deben ser creados manualmente y con esto nos referimos a que cada uno de estos deben tener su configuración en donde se le asigna el puerto y dependencias como puede ser el Transport.
Para esto nestjs cuenta con el méttodo connectMicroservices.
const app = await NestFactory.create(AppModule);
const microservice = app.connectMicroservice<MicroserviceOptions>({
transport: Transport.TCP,
});
await app.startAllMicroservices();
await app.listen(3001);
con app.listen(PORT) es usado con servidor HTTP en una dirección específica, en caso de no lanzar peticiones HTTP se debe usar app.init(). Lo que significa que si el microservicio escucha peticiones de tipo POST, GET.. necesita escuchar un puerto pero el microservicio lo que hace es realizar tareas como el envío de un email esta solo necesita inicializarse.
Un ejemplo de como tener varios microservicios que tienen su propio puerto y transporte independiente una de otras.
const app = await NestFactory.create(AppModule);
// microservice #1
const microserviceTcp = app.connectMicroservice<MicroserviceOptions>({
transport: Transport.TCP,
options: {
port: 3001,
},
});
// microservice #2
const microserviceRedis = app.connectMicroservice<MicroserviceOptions>({
transport: Transport.REDIS,
options: {
host: 'localhost',
port: 6379,
},
});
await app.startAllMicroservices();
await app.listen(3001);
En este punto tenemos dos microservicios el cual tiene diferentes puertos, transportes ambos se entrelazan a traves del metodo connectMicroservice() luego para iniciar todos los servicios se implementa el método startAllMicroservices() y aunque el microservicio que tiene el transporte TCP con el puerto 3001 es necesario inicializarlo con app.listen(3001)