Zustellgarantien
Ein Broker kann eine Nachricht erneut zustellen, wenn eine Bestätigung ausbleibt. Eine zuverlässige Verarbeitung verbindet deshalb dauerhafte Wirkung mit wiederholbarer Behandlung.
- At-most-onceBestätigen vor dem Speichern.
- At-least-onceBestätigen nach dem Speichern.
- Effektiv einmalAt-least-once plus Idempotenz.
Einordnung
Warum das wichtig ist
Der Bestätigungszeitpunkt entscheidet über Verlust oder Duplikat. Exactly-once gibt es nicht als Transportzusage; effektiv einmal entsteht aus at-least-once plus Idempotenz. Outbox, Idempotenz und Retry vertiefen einzelne Mechanismen.
Dieser Baustein erklärt Zustellbestätigungen und Wiederzustellung. Outbox sichert die Veröffentlichung aus einer lokalen Transaktion; Idempotenz schützt die Wirkung vor Duplikaten.
Auf einen Blick · Bestätigung nach dem Speichern
Wann wird bestätigt?
Der Shop veröffentlicht eine Bestellung für die Rechnungserstellung. Ein Worker speichert Rechnung und Auftragskennung, bevor er die Brokerzustellung bestätigt.
So liest du das Bild
- At-most-once Reihenfolge „vor dem Speichern“ mit Absturz ergibt: Auftrag verloren.
- At-least-once Reihenfolge „nach dem Speichern“ mit Absturz ergibt eine Wiederzustellung.
- Effektiv einmal Mit gesetzter Kennungsprüfung zeigt das Ergebnis „effektiv einmal“ statt zwei Rechnungen.
- Broker stellt B-1042 zu
- Worker speichert Rechnung
- Absturz
- Worker bestätigtentfällt
- Broker stellt erneut zu
- Worker speichert Rechnung (erneut)
- Worker bestätigt
zwei Rechnungen
Die Wiederzustellung von B-1042 trifft einen Worker ohne Kennungsprüfung; er legt eine zweite Rechnung an.
Nutzen & Grenzen
Hilft, wenn
- Zustellgarantien helfen beim Entwurf, wenn Transport bei Fehlern Nachrichten verlieren oder wiederholen kann.
- Getrennte Transportbestätigung und fachliche Änderung benötigen eine Behandlung des Wiederholungsfensters.
- Eine genau-einmalige Zusage muss ihren unterstützten Transaktionsbereich ausdrücklich benennen.
Grenzen
- At-most-once kann Aufträge verlieren, at-least-once erzeugt Duplikate; wähle nach der fachlichen Folge für die Rechnung.
- Broker und Rechnungsablage haben getrennte Transaktionsgrenzen; ohne gemeinsame Kennung bleibt eine Wiederzustellung nicht erkennbar.
- Idempotenz schützt nur die Wirkung im Worker; Retry begrenzt zusätzlich Wiederholungen und Ressourcenverbrauch.
In der Praxis
- Wähle Verlust- und Wiederholungszusage für den Transport und nenne deren Transaktionsgrenze. Die fachliche Wirkung erhält eine davon getrennte Erfolgskontrolle.
- Speichere die fachliche Empfängerwirkung dauerhaft und bestätige die Nachricht anschließend. Ein Absturz zwischen Commit und Bestätigung führt zu einer Wiederholung, die der Empfänger sicher zuordnet.
- Teste Duplikate und dauerhafte Fehler mit Kennung und Reihenfolge. Idempotenz schützt Wirkungen; Retry steuert Versuche.
Ausführliche Erklärung lesen
Zustellgarantien legen fest, welche Ergebnisse ein Transport ermöglicht: At-most-once vermeidet Wiederholungen und kann Nachrichten verlieren; at-least-once wiederholt bis zur Bestätigung und kann Duplikate liefern.
Genau-einmal-Aussagen gelten nur innerhalb ausdrücklich unterstützter Transaktionsgrenzen. Bestätigung des Transports ist nicht automatisch die dauerhafte fachliche Wirkung. Deduplizierung, Wiederaufnahme und Behandlung dauerhafter Fehler schließen diese Lücke.
Idempotenz schützt die fachliche Empfängerwirkung bei doppelter Zustellung; Retry steuert Zeitpunkt und Begrenzung weiterer Versuche. Transportbestätigung und Geschäftserfolg bleiben getrennte Aussagen.
Exactly-once gibt es über ein Netzwerk nicht als Transportzusage. Praktisch entsteht „effektiv einmal“ aus At-least-once plus idempotenter Verarbeitung, siehe Idempotenz.
Selbst prüfen
Teste dich in drei Stufen
AblesenIm Bild nachsehen
Welches Ergebnis zeigt die Ansicht bei „Bestätigen vor dem Speichern“ mit Absturz zwischen den Schritten?
Lösung mit Begründung ansehen
„Keine Rechnung – Auftrag verloren“: B-1042 ist quittiert, die Rechnung wurde aber nie gespeichert.
AnwendenAuf eine neue Lage übertragen
Der Shop bestätigt nach dem Speichern, der Worker stürzt dazwischen ab und prüft keine Kennung. Wie viele Rechnungen entstehen für B-1042?
Lösung mit Begründung ansehen
Zwei. Der Broker stellt erneut zu, und ohne Kennungsprüfung legt der Worker die Rechnung ein zweites Mal an.
BewertenEine Alternative abwägen
Was spricht für at-least-once mit Idempotenz statt at-most-once? Was ist der Preis, und was empfiehlst du für Rechnungen?
Lösung mit Begründung ansehen
Vorteil: Kein Auftrag geht verloren. Nachteil: Der Worker braucht Kennungsprüfung und Ablage. Für Rechnungen empfehle ich at-least-once mit Idempotenz, weil ein verlorener Auftrag fachlich schwerer wiegt.
Vertiefen
Diese Bausteine führen die Gedanken dieser Seite weiter.
Quellen
- RabbitMQ – Consumer Acknowledgements and Publisher Confirms (öffnet in neuem Tab)Unterscheidet Bestätigung beim Produzenten und Konsumenten sowie Wiederzustellung.
- Apache Kafka – Message Delivery Semantics (öffnet in neuem Tab)Beschreibt At-most-once, At-least-once und transaktionale Exactly-once-Semantik.
- Amazon SQS – At-least-once delivery (öffnet in neuem Tab)Zeigt, warum Standard-Queues idempotente Verarbeitung benötigen.