Event-Driven Architecture
Componentes desacoplados se comunican publicando y reaccionando a eventos, no llamándose directamente.
Contexto
Servicios que necesitan reaccionar a hechos del negocio sin acoplarse al productor.
Solución
Productores publican eventos (OrderPlaced, PaymentFailed) en un broker. Consumidores se suscriben.
// Producer
await _bus.PublishAsync(new OrderPlaced(order.Id, order.Total));
// Consumer (otro servicio)
public class SendConfirmationEmail : IConsumer<OrderPlaced>
{
public Task Consume(ConsumeContext<OrderPlaced> ctx) => /* enviar email */;
}Cuándo NO aplicarlo
- Cuando el negocio necesita respuesta síncrona inmediata.
- Sin idempotencia y sin esquemas versionados, el sistema se vuelve frágil.
Tradeoffs
| Pro | Contra |
|---|---|
| Acoplamiento mínimo | Difícil seguir un flujo end-to-end |
| Escala muy bien | Eventual consistency obligatoria |
#architecture #events