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