Warum ein Retry zwei Rechnungen erzeugen kann

Die Abrechnung fordert für eine Bestellung eine Rechnung an und wartet höchstens 5 Sekunden auf die Antwort. Vergleichen Sie zwei Fälle: Der Anbieter antwortet zu spät, oder die erste Anfrage erreicht ihn gar nicht.

Ein Timeout sagt nicht, ob die Rechnung erstellt wurde.

Sequenzdiagramm: Ein Retry erzeugt eine zweite Rechnung Die Abrechnung verlangt beim Rechnungsanbieter eine Rechnung für Bestellung 1042. Der Anbieter erstellt INV-1, antwortet aber langsam. Nach 5 Sekunden wartet die Abrechnung nicht länger und sendet dieselbe Anfrage nochmals. Der Anbieter hält sie für neu, erstellt INV-2 und antwortet mit INV-2. Die späte Antwort mit INV-1 trifft nach 45 Sekunden ein. Ergebnis: zwei Rechnungen für eine Bestellung. Abrechnung Rechnungsanbieter Rechnung erstellen, Bestellung 1042 erstellt INV-1 Timeout 5 s Retry: Rechnung erstellen, 1042 erstellt INV-2 INV-2 INV-1 (nach 45 s) 2 Rechnungen für 1 Bestellung
Ausgangssituation: Der Retry erzeugt eine zweite Rechnung. Simulierter Anbieter, läuft nur in Ihrem Browser.
Erklärung

Was hier passiert

Auch bei einer Wiederholung darf keine zweite Rechnung entstehen. Deshalb gehört der Schlüssel zur Bestellung, nicht zum einzelnen Versuch, und wird vor dem ersten Aufruf gespeichert, damit auch nach einem Neustart derselbe verwendet wird. Ein Anbieter mit Idempotency-Keys liefert für einen bekannten Schlüssel das ursprüngliche Ergebnis.

Ohne Retry gibt es keine Duplikate, aber fehlgeschlagene Anfragen bleiben offen. Ein längeres Timeout hilft nur, wenn die Antwort vor Ablauf dieser Frist eintrifft.

In diesem Modell: eine Bestellung, höchstens eine Rechnung, solange sich der Anbieter den Schlüssel merkt.

Annahmen

  • Der simulierte Anbieter merkt sich Schlüssel und liefert für einen wiederholten Schlüssel innerhalb seiner Aufbewahrungsfrist die ursprüngliche Rechnung.
  • In Fall A dauert die erste Antwort immer 45 Sekunden, der Retry wird sofort beantwortet.
  • Viele Anbieter unterstützen keine Idempotency-Keys. Eine Abfrage vor dem Retry hilft, kann aber eine noch laufende Anfrage nicht klären. Verlässlich sind eine Referenz, für die der Anbieter höchstens eine Rechnung zulässt, oder ein nachträglicher Abgleich. Ein zusätzlicher Header allein verhindert gar nichts.