<aside>

Contenido

  1. Introducción
  2. Stack tecnológico
  3. Arquitectura de Software
  4. Esquema / Diseño de Base de Datos
  5. Integración RabbitMQ
  6. ms-clientes → Microservicio (Cliente, Persona)
  7. ms-cuentas → Microservicio (Cuenta, Movimientos)
  8. Comunicación entre microservicios
  9. Seguridad
  10. Pruebas unitarias
  11. Pruebas de integración
  12. Buenas prácticas de desarrollo
  13. Documentación API
  14. Despliegue en Docker
  15. CI/CD → AWS EC2
  16. Probar solución

</aside>

<aside>

El flujo es: cuando se crea o actualiza un cliente en ms-clientes, se publica un evento a RabbitMQ. ms-cuentas lo escucha y actualiza el nombre localmente.

Producer, Exchange, Queue, Consumer

image.png

El flujo paso a paso

Paso 1 - Producer publica

Cuando se crea un cliente, ms-clientes manda un mensaje JSON al Exchange. No le importa quién lo recibe ni si alguien lo lee. Solo lo suelta.

Paso 2 - Exchange enruta

El Exchange recibe el mensaje y decide a qué Queue mandarlo usando el Routing Key (cliente.evento).

Paso 3 - Queue almacena

La Queue guarda el mensaje hasta que alguien lo consuma. Si ms-cuentas está caído, el mensaje no se pierde, se queda esperando en la Queue. Cuando ms-cuentas vuelve a levantar, lo procesa. Esto es lo que hace RabbitMQ asíncrono, el productor no espera respuesta.

Paso 4 - Consumer lee y confirma

ms-cuentas (con @RabbitListener) toma el mensaje de la Queue, actualiza el clienteNombre en las cuentas, y le dice a RabbitMQ que ya lo procesó (ACK). RabbitMQ entonces elimina el mensaje de Queue.

¿Por qué Topic Exchange y no Direct?

RabbitMQ tiene varios tipos de Exchange. Usamos Topic porque permite routing flexible con patrones. Si mañana agregamos más eventos (cliente.creado, cliente.eliminado, cuenta.creada) puedemos filtrar con wildcards: cliente.* escucha todos los eventos de cliente. Con Direct solo podrías hacer matching exacto.

Para nuestro caso actual con 2 microservicios y un solo consumer, Topic funciona pero es más por preparación a futuro. Entonces elegimos Topic Exchange porque permite escalar el routing sin modificar el productor. Si después agregamos un servicio de notificciones que solo necesita escuchar eliminaciones , se suscribe con cliente.eliminado sin tocar ms-clientes.

La queue es durable, los mensajes persisten en disco. Si el consumidor está caído, los mensajes se acumulan y se procesan cuando vuelve. No se pierde información.

</aside>