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