Event Bus
La infraestructura que permite comunicación asíncrona entre servicios mediante eventos.
¿Qué es un Event Bus?
Es el mecanismo que permite que un servicio publique un hecho relevante y que otros servicios reaccionen a él sin necesidad de llamadas directas inmediatas.
Por ejemplo:
ms-orderspublicaOrderPlacedms-inventoryconsume ese eventoms-notificationstambién lo consume
¿Por qué usar eventos?
Porque ayudan a:
- desacoplar servicios en el tiempo
- reducir dependencias síncronas
- permitir reacciones múltiples ante un mismo hecho
- construir procesos distribuidos
Responsabilidades principales
- Transporte de eventos
- Publicación y suscripción
- Reintentos
- Manejo de mensajes fallidos
- Soporte para DLQ
- Apoyo a procesos distribuidos
Qué no debería ser
El event bus no debería convertirse en un lugar donde vive la lógica de negocio central. La lógica de reacción debe estar en los servicios consumidores.
Tampoco debería usarse como excusa para publicar eventos ambiguos o mal definidos.
Conceptos importantes
Evento de dominio
Representa algo significativo que ocurrió en el negocio.
Idempotencia
Necesaria porque los mensajes pueden llegar más de una vez.
Dead Letter Queue
Lugar donde van mensajes que no pudieron procesarse correctamente.
At-least-once delivery
Garantía común en muchos brokers: el mensaje llegará al menos una vez, pero puede duplicarse.
Trade-offs
Beneficios
- Desacoplamiento
- Escalabilidad
- Integración más flexible
- Procesamiento distribuido
Costes
- Más complejidad operativa
- Consistencia eventual
- Observabilidad más difícil
- Necesidad de reintentos e idempotencia
Ejemplo práctico
Una orden se crea y se confirma.
ms-orders publica OrderPlaced.
A partir de ahí:
- inventory descuenta stock
- notifications envía confirmación
- analytics registra el evento
Ninguno necesita ser llamado directamente en el mismo flujo síncrono.
Resumen
El Event Bus permite comunicación asíncrona entre servicios. Su valor está en desacoplar y distribuir responsabilidades, pero exige más disciplina en contratos, observabilidad e idempotencia.