Introducción: Consistencia entre BD y eventos
El patrón Outbox garantiza que los cambios en la base de datos y la publicación de eventos estén alineados.
En lugar de publicar directamente, se guarda el evento en una tabla Outbox dentro de la misma transacción que actualiza los datos.
Luego un proceso separado lee la Outbox y publica los eventos, evitando pérdidas si el broker falla.

Prompt: Outbox table and event dispatcher, clean minimal style.
1. Naturaleza: Bandeja de salida
Cuando escribes una carta, la dejas en la bandeja de salida para asegurar que sea enviada.
Aunque el cartero falle hoy, la carta sigue allí hasta que se entregue. Eso es exactamente lo que hace la Outbox.

Prompt: Outbox tray with letters, soft illustration.
2. Mundo Real: Confirmación de pedidos
Un e-commerce confirma un pedido y debe notificar a otros servicios.
Si la base de datos se actualiza pero la notificación falla, el sistema queda inconsistente.
Con Outbox, la confirmación y el evento se guardan juntos, y la publicación ocurre de manera segura después.

Prompt: Order confirmation flow with outbox, clean flat style.
3. Implementación en C#: Código Paso a Paso
public class OutboxMessage
{
public Guid Id { get; set; }
public string Payload { get; set; }
public DateTime CreatedAt { get; set; }
}
// En la misma transacción que el dominio
var message = new OutboxMessage { Id = Guid.NewGuid(), Payload = "PedidoCreado" };
// Guardar message en tabla Outbox
Un worker de fondo lee la tabla Outbox y publica al broker. Después marca el evento como enviado.
Este enfoque minimiza inconsistencias y evita pérdidas de mensajes ante fallos.
4. Outbox vs Publicación directa
La publicación directa es más simple, pero riesgosa: un fallo entre la BD y el broker rompe la consistencia.
Outbox agrega un paso extra, pero garantiza que ningún cambio se quede sin su evento.
5. Diagrama UML

Prompt: UML diagram of Outbox pattern, clean vector layout.

Prompt: Outbox publishing flow diagram, minimal infographic style.
⚠️ Cuándo NO Usar Outbox
- Si la operación no requiere eventos distribuidos.
- Si puedes tolerar inconsistencias temporales sin impacto.
- Si el costo de un worker adicional no se justifica.
💪 Ejercicio
Implementa una tabla Outbox y un proceso que publique los eventos pendientes con reintentos.
Conclusión
Outbox es esencial para sistemas que necesitan consistencia entre datos y eventos.
Con este patrón, reduces fallos silenciosos y aumentas la confiabilidad del sistema.