Este es un proyecto de ejemplo que demuestra la implementación de comunicación entre microservicios utilizando RabbitMQ y NestJS. El objetivo es mostrar cómo diferentes servicios pueden interactuar de manera eficiente y desacoplada mediante colas de mensajes, facilitando la escalabilidad y la resiliencia en arquitecturas distribuidas.
-
Clona el repositorio:
git clone <URL_DEL_REPOSITORIO> cd rabbitmq-nestjs
-
Instala las dependencias:
npm install
-
Configura las variables de entorno:
- Copia y ajusta los archivos
.env.developmento.env.productionsegún el archivo.env.example.
- Copia y ajusta los archivos
-
Levanta los servicios de RabbitMQ:
docker-compose up -d
-
Inicia los microservicios: Puedes iniciar cada microservicio individualmente, por ejemplo:
npx nx serve api-gateway npx nx serve orders npx nx serve payments npx nx serve notifications
O bien, puedes abrir varias terminales y ejecutar cada comando por separado.
Tambien puedes ejecutar todos los servicios al mismo tiempo con el siguiente comando
nx run-many -t serve --all
La arquitectura de este proyecto está basada en microservicios que se comunican a través de RabbitMQ usando el patrón de colas de mensajes. Cada microservicio publica y consume mensajes según su responsabilidad:
- api-gateway: Recibe las solicitudes externas y las distribuye a los microservicios correspondientes mediante mensajes en RabbitMQ.
- orders, payments, notifications: Cada uno de estos servicios escucha mensajes en sus respectivas colas y responde o ejecuta acciones según el mensaje recibido. Por ejemplo, el servicio de órdenes puede emitir un evento cuando se crea una orden, el de pagos procesa pagos y el de notificaciones envía mensajes al usuario.
Esta comunicación asíncrona permite que los servicios sean independientes, tolerantes a fallos y fácilmente escalables.
Proyecto de ejemplo para la implementación de microservicios con NestJS y RabbitMQ.