Nest.js es un framework web progresivo de Node.js que te proporciona un backend robusto para tus aplicaciones frontend. Es altamente comparable a Angular en términos de conceptos como Módulo, Proveedor, entre otros, y es una clara elección por los desarrolladores de Angular.
La necesidad del Redis transporte
Para entender la necesidad del transportador Redis, veremos la siguiente ilustración.
En la ilustración anterior, cada servicio publica mensajes en Redis. También se suscriben a los mensajes de Redis. Los mensajes publicados se clasifican en canales sin saber qué servicios recibirán el mensaje. Además, es totalmente posible que ningún servicio reciba un tipo de mensaje concreto.
Cada microservicio puede suscribirse a un gran número de canales. Alternativamente, cada canal también puede ser suscrito por múltiples servicios. La idea básica es que los mensajes son fire and forget. En otras palabras, si se publica un mensaje y ningún servicio se suscribe a él, el mensaje será eliminado. Básicamente, no hay garantía de que cada mensaje llegue a un suscriptor.
En este enfoque, los distintos microservicios están ampliamente desacoplados entre sí. No es necesario que ningún microservicio conozca la existencia de otros servicios. En otras palabras, cada microservicio puede evolucionar por sí mismo con un intermediario común para la comunicación con sus pares.
Instalación
Primero instalamos los siguientes paquetes en el cliente y en el microservicio.
$ npm i --save @nestjs/microservices
$ npm i --save redis
Básicamente, el cliente publicará un mensaje en Redis. El servicio se suscribirá al mensaje y hará algo con el mensaje.
Además, necesitamos Redis para que las cosas funcionen. Usaremos docker para crear rápidamente un contenedor Redis usando el siguiente comando:
$ docker run --name demo-redis -p 6379:6379 -d redis
Una vez que el contenedor está arriba y los paquetes están instalados, podemos empezar con los siguientes pasos.
Configurar el Microservicio NestJS Redis
Para utilizar el transportador Redis, pasamos el objeto options al método createMicroservice() de la clase NestFactory.
Básicamente, especificamos el tipo de transporte. En este caso, utilizamos el enum Transport.REDIS para el mismo. Además, especificamos la URL de nuestro contenedor Redis en ejecución.
Nótese aquí que el objeto de opciones depende del tipo de transporte. Además de la URL, otras propiedades disponibles son retryAttempts y retryDelay. Puedes ver los detalles de todas las propiedades disponibles en este enlace.
Suscripción a un evento en el microservicio NestJS Redis
Ahora podemos suscribirnos a un evento particular o a un mensaje en el Microservicio NestJS Redis.
Véase el código siguiente:
Básicamente, estamos utilizando MessagePattern y EventPattern para recibir mensajes. Para el propósito de este post, puedes simplemente pensar en estos métodos como manejadores para diferentes tipos de mensajes.
Publicar un mensaje
Para publicar un mensaje usando el transportador Redis, necesitamos configurar la aplicación cliente. En primer lugar, tenemos que especificar cómo el cliente debe comunicarse con Redis.
Básicamente, aquí usamos el método register() del ClientsModule para registrar nuestro servidor Redis. Especificamos un nombre de token GREETING_SERVICE en la configuración. Básicamente, usando este nombre de token y ClientProxy, podemos inyectar este servicio dentro de nuestra aplicación.
Ver abajo:
La instancia ClientProxy viene con métodos como send() y emit(). Usando estos métodos, podemos enviar o publicar mensajes. Si vamos estrictamente a la ruta de publicación-suscripción, es mejor usar el método emit().
Quiero más
Por supuesto! gracias al apoyo que se ha conseguido por todos ustedes (comentando, suscribiendote y compartiendo) se agregaron nuevos videos, en esta ocasión iniciamos el curso de testing en angular, curso de node, curso mongo y mucho más
A continuación se muestra una implementación del controlador para activar estos métodos de servicio.
Conclusión
Con esto, hemos aprendido con éxito cómo crear un Microservicio NestJS Redis. Hemos aprendido a configurar el transportador Redis y a utilizarlo para implementar el enfoque de mensajería publish-subscribe.