78. pepsi-failure-bouncer¶
Leitet fehlgeschlagene/Timeout-Nachrichten an die Bounce-Stage.
78.1. Rolle¶
Eine Nachricht in der Pipeline nach dem Ingress endet als failed (eine Stage gab einen dauerhaften Fehler, oder ihr Worker stürzte ab) oder timeout (ein Worker überschritt [pepsi-dispatch] MAX_RUNTIME), wenn ihre Stage aufgibt. Der Dispatcher reiht einen solchen Datensatz nie erneut ein, sodass die Nachricht ohne Operator-Eingriff in pepsi.workqueue steckenbleibt und der Absender nie benachrichtigt wird.
pepsi-failure-bouncer verschiebt jede steckengebliebene Nachricht zum konfigurierten [pepsi-failure-bouncer] BOUNCE_STAGE und setzt sie auf pending zurück, sodass der Dispatcher die Bounce-Stage (pepsi-stage-bounce) ausführt, die — gemäß dem RFC-3461-NOTIFY des Absenders — eine Zustellungsstatusbenachrichtigung ausgibt. Eine bereits an der Bounce-Stage befindliche Nachricht wird in Ruhe gelassen, sodass ein Bounce, der an dieser Stage fehlschlägt, nicht in eine Schleife gerät; einer, der nach ihr fehlschlägt (eine nicht weiterleitbare Null-Absender-DSN), wird zurückverschoben und einfach verworfen (ein Bounce wird nie erneut gebounct).
Es verbindet sich über [pepsi-postgres] und wird durch [pepsi-failure-bouncer] konfiguriert, dessen BOUNCE_STAGE erforderlich ist (es ist die gesamte Konfiguration: die Stage, zu der steckengebliebene Nachrichten verschoben werden). Es ist keine Stage. Als root gestartet, läuft es vor dem Verbinden als Dienstkonto pepsi weiter — der Rolle, der die Warteschlange gehört. Referenz: pepsi-failure-bouncer(1).
78.2. Modi¶
service (der Standardwert, kein
--once) — ein langlebiger Prozess, der den Kanalworkqueue_failedmitLISTENabhört (ausgelöst vom Triggerworkqueue_failed_notify, wann immer ein Datensatz failed/timeout wird) und jede Nachricht bouncet, sobald sie eintrifft. Er fegt alle bereits steckengebliebenen Nachrichten beim Start und bei jeder Wiederverbindung durch, sodass nichts übersehen wird, und läuft bisSIGINT/SIGTERM.–once — die derzeit steckengebliebenen Nachrichten einmalig durchfegen und sich beenden (ein manueller Operator-Lauf oder ein Cron-Job).
--failed-only / --timeout-only beschränken einen der beiden Modi auf einen der beiden terminalen Zustände.
78.3. Siehe auch¶
pepsi-dispatch, pepsi-stage-bounce, pepsi-queue, pepsi-status, pepsi-failure-bouncer(1), pepsi.conf(5).