Outbox und Saga Deep Dive
Problem
Ein Bestellservice soll eine Bestellung speichern und ein Event publizieren. Wenn erst die Datenbank schreibt und danach Kafka fehlschlaegt, entsteht ein inkonsistenter Zustand. Wenn erst Kafka publiziert und danach die Datenbank fehlschlaegt, entsteht ebenfalls Inkonsistenz.
Loesung: Transactional Outbox
Die Fachtransaktion schreibt Bestellung und Outbox-Datensatz gemeinsam. Ein Relay publiziert spaeter zuverlaessig.
// PATTERN: Transactional Outbox
orders.save(order);
order.domainEvents().forEach(outbox::append);
Saga
Eine Saga koordiniert laengere Prozesse wie Zahlung, Reservierung, Versand. Jeder Schritt hat Kompensationen oder klare Fehlerzustaende.
Wann sinnvoll?
- Payment und Fulfillment sind getrennte Systeme.
- Messaging ist asynchron.
- Kein globales XA ueber alle Systeme gewuenscht.
- Retries und Idempotenz sind Pflicht.