Explica cómo diseñar eventos e integraciones con contratos, ownership, entrega, orden, duplicados, idempotencia, evolución de schemas y recuperación.
Última actualización
Actualizada
Nivel
Aplicación
La integración asíncrona cambia el problema: ya no basta con enviar un mensaje. Debes diseñar entrega, duplicados, orden, idempotencia, retención, recuperación y observabilidad.
Los eventos y mensajes permiten coordinar sistemas sin mantener una llamada bloqueante. Un productor comunica una intención o un hecho; uno o más consumidores procesan el mensaje según un contrato.
Las llamadas síncronas acoplan disponibilidad y latencia. Si crear un pedido espera inventario, pagos, facturación, notificaciones y analítica, una sola dependencia lenta puede bloquear todo.
La asincronía desacopla tiempos, pero introduce estados intermedios e incertidumbre. No elimina complejidad: la transforma.
Distribuye trabajo. Normalmente un mensaje es procesado por un consumidor dentro de un grupo. Es útil para tareas diferidas, emails, generación de archivos y absorción de picos.
Conserva una secuencia durante un periodo. Varios consumidores mantienen su propia posición y pueden releer. Es útil para eventos, telemetría, CDC y proyecciones.
La tecnología concreta puede combinar capacidades, pero el modelo mental debe permanecer claro.
Muchos sistemas garantizan entrega al menos una vez. El mismo mensaje puede llegar varias veces debido a retries, pérdida de acknowledgements o recuperación.
El consumidor debe ser idempotente:
Texto
si eventId ya fue procesado
→ no repetir el efecto
→ devolver éxito o registrar duplicado
“Exactly once” suele tener un alcance limitado dentro de una plataforma. No elimina efectos externos duplicados como emails o cobros si estos no participan de la garantía.
Un evento de dominio puede contener detalles internos y existir dentro de una transacción local. Un evento de integración es un contrato estable para otros sistemas y puede necesitar transformación, minimización y versionado independiente.
No publiques automáticamente todos los eventos internos.
Una llamada local o síncrona puede ser mejor cuando el resultado debe conocerse inmediatamente, el flujo es simple, los componentes comparten disponibilidad y la asincronía solo añadiría estados y operación sin beneficio.