JEnterprise Senior Java Workbench
Senior Java · Fachbereich

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.

Zur Übersicht

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.

Event und Command sauber unterscheiden
Wiederholungszustellung sicher verarbeiten
Schema und Betrieb gemeinsam planen

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.

JSON
{
  "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.

JAVA
@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.

Spring-Kafka-Outbox-Fluss

Praxisartefakt · Event-Vertrag

Event
PaymentAuthorized.v2 beschreibt 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.
⌂ Cockpit