Messaging & Event-driven Systems
Kafka, Zustellsemantik, Idempotenz, Outbox, Schema-Evolution, Retry und Dead-Letter-Verarbeitung. Nutze die Seite bei einer Integration über Systemgrenzen: Kläre Vertrag, Zustellung, Fehlerpfad, Wiederholung und den Nachweis für kompatibles Verhalten.
Arbeitsauftrag
Wann verwenden?
Bei asynchronen Prozessen, Event-Evolution oder Problemen mit Zustellung, Reihenfolge und Wiederholung.
Nicht dafür verwenden
Nicht wenn ein einfacher synchroner Aufruf die fachliche Anforderung zuverlässig erfüllt.
Definition of Done
Semantik, Schema, Idempotenz, Retry, DLT, Ordering, Replay und Observability sind implementiert und getestet.
Kommunikationsform wählen
| Form | Semantik | Fehlerbehandlung | Beobachtung |
|---|---|---|---|
| Synchron | Antwort ist für den nächsten Schritt nötig | Timeout, Retry-Budget, Circuit Breaker | Latenz und Fehlerquote |
| Queue/Command | genau ein Empfänger soll arbeiten | Idempotenz und Dead Letter | Queue-Tiefe und Alter |
| Event | Fakt ist für mehrere Consumer relevant | Schemaevolution und Replay | Consumer Lag und Verarbeitung |
Nachrichtenbedeutung
Ein Domain Event beschreibt etwas Geschehenes. Ein Command fordert eine Handlung an. Technische Nachrichten ohne klare Semantik erschweren Ownership und Evolution.
Event-Namen stehen in Vergangenheitsform und enthalten die für Konsumenten stabile fachliche Aussage.
{
"eventId": "evt-123",
"eventType": "OrderPlaced",
"occurredAt": "2026-07-12T10:15:30Z",
"orderId": "ord-4711",
"customerId": "cus-91",
"total": { "amount": 149.90, "currency": "EUR" }
}
Idempotenter Consumer
At-least-once-Zustellung bedeutet, dass Duplikate normal sind. Der Consumer speichert verarbeitete Ereignisidentitäten oder verwendet natürlich idempotente Zustandsübergänge.
Die Idempotenzgrenze muss mit der fachlichen Zustandsänderung atomar verbunden sein.
@Transactional
public void consume(OrderPlaced event) {
if (processedEvents.exists(event.eventId())) {
return;
}
projection.update(event);
processedEvents.markProcessed(event.eventId());
}
Retry und Dead Letter
Retry hilft bei vorübergehenden Fehlern. Fachlich ungültige Nachrichten werden durch Wiederholung nicht korrekt. Deshalb werden Fehler klassifiziert, Backoff begrenzt und Dead-Letter-Fälle mit Kontext beobachtbar gemacht.
Production Path: Outbox, Kafka/Redpanda und Idempotenz
Der neue Referenzpfad behandelt das reale Fehlerfenster zwischen Datenbank und Broker. At-least-once wird mit einer atomaren Consumer-Marke beherrscht, statt mit einem unhaltbaren Exactly-once-Versprechen kaschiert.
Praxisartefakt · Event-Vertrag
- Event
-
PaymentAuthorized.v2beschreibt ein abgeschlossenes fachliches Faktum. - Schlüssel
- PaymentId sichert Partitionierung und Reihenfolge je Zahlung.
- Idempotenz
- Consumer speichert EventId mit fachlicher Änderung atomar.
- Retry
- Technische Fehler exponentiell; fachliche Fehler direkt in Quarantäne.
- Replay
- Versionierter Handler und isolierter Dry Run vor produktivem Replay.