HoldTheSeat

A seat-booking saga across three independently deployed services. No shared database, no distributed transaction — correctness comes from an outbox, idempotent consumers, and a Redis hold that only one booking can win.

Spring Boot 4Kafka KRaft PostgresRedis Saga + outboxDocker Compose

Seat map live · refreshes every 3s

STAGE
available held — someone is paying sold

Books the selected seat and follows the saga as it hops between services. Each event is written to an outbox in the same transaction as the state change, then published to Kafka — so nothing is lost if a service dies mid-flight.