Payments API
Registra el pago y el evento en una misma transacción. Luego, un relay drena la outbox hacia el broker
Arquitectura
Qué demuestra
- Tabla payments como estado de negocio y tabla outbox con eventos pending / sent / failed
- Atomicidad: pago y evento se escriben en la misma transacción (ambos o ninguno)
- Relay en segundo plano que publica pendientes con reintentos
- Modo caos: si el broker cae, los eventos esperan y se drenan al reactivarlo
Backend Architecture
- Go + PostgreSQL.
- Migraciones con golang-migrate.
- Broker in-process.
- Entrega at-least-once vía outbox + relay asíncrono; idempotencia en el consumidor (dedupe por event_id) para efecto exactly-once.
Tecnologías
- Go
- PostgreSQL
- golang-migrate