Fehlgeschlagenen Vorgang in Jitterbit Studio erneut ausführen
Einführung
Vorübergehende Fehler (wie API-Ratenlimit-Antworten, kurze Netzwerk-Timeouts oder temporäre Serviceverfügbarkeit) können dazu führen, dass ein ansonsten fehlerfreier Vorgang zeitweilig fehlschlägt. Anstatt einen einzelnen Fehler die Integration zu stoppen, führt ein Retry-Controller-Skript den Vorgang automatisch bis zu einer konfigurierten Anzahl von Malen erneut aus, bevor ein endgültiger Fehler ausgelöst wird.
Diese Anleitung zeigt, wie man ein Retry-Controller-Skript mit While, RunOperation, GetLastError und RaiseError schreibt.
Diese Anleitung setzt Vertrautheit mit der Verwendung von Skripten zum Aufrufen von Vorgängen voraus. Hintergrundinformationen finden Sie unter Vorgänge verketten und steuern. Überlegungen zum asynchronen Ausführen von RunOperation finden Sie unter Asynchrone Vorgänge verwalten.
Entwurfsmuster
Das Muster verwendet zwei Vorgänge:
- Zielvorgang: Der Vorgang, der vorübergehend fehlschlagen kann, typischerweise einer, der eine externe API aufruft.
- Controller-Vorgang: Ein einzelner Skriptschritt, der das Ziel mit
RunOperationin einerWhile-Schleife mit einem Zähler aufruft.
Drei Variablen koordinieren die Schleife:
maxRetries: die Gesamtzahl der Versuche vor dem Auslösen eines Fehlers. Legen Sie dies auf die maximale Anzahl fest, wie oft der Vorgang ausgeführt werden soll, einschließlich des ersten Versuchs.attempt: die aktuelle Versuchszahl, initialisiert auf0und am Anfang jeder Schleifenwiederholung erhöht.success: ein Flag, das auffalseinitialisiert und auftruegesetzt wird, wennRunOperationerfolgreich ist, wodurch die Schleife vorzeitig beendet wird.
Teil 1: Zielvorgang konfigurieren
Der Zielvorgang kann ein beliebiger Vorgang sein: ein HTTP v2 GET, eine Connector-Abfrage oder eine Transformationskette. Die einzige Anforderung ist, dass er als benannter Vorgang auf der Designoberfläche vorhanden ist, damit RunOperation ihn nach Tag aufrufen kann.
Wenn der Vorgang bereits auf der Oberfläche als eigenständiger Vorgang vorhanden ist, sind keine Änderungen erforderlich. Wenn er sich derzeit inline in einer größeren Kette befindet, verschieben Sie ihn in einen eigenen Vorgang, damit er unabhängig aufgerufen werden kann.
Teil 2: Retry-Controller-Skript schreiben
-
Erstellen Sie auf der Designoberfläche einen neuen Vorgang, der nur einen Script-Schritt enthält.
-
Doppelklicken Sie auf das Skript, um den Editor zu öffnen, und geben Sie Folgendes ein:
$maxRetries = 3; $attempt = 0; $success = false; While(!$success && $attempt < $maxRetries, $attempt++; If(RunOperation("<TAG>operation:Call External API</TAG>"), $success = true; , WriteToOperationLog("Attempt " + $attempt + " of " + $maxRetries + " failed: " + GetLastError()); ); ); If(!$success, RaiseError("Operation failed after " + $maxRetries + " attempts: " + GetLastError()); );Ersetzen Sie
Call External APIdurch den genauen Namen des Zielvorgangs. -
Speichern Sie das Skript.
Wichtige Punkte zu diesem Skript:
$maxRetries = 3bedeutet 3 Gesamtversuche. Passen Sie diesen Wert an die Zuverlässigkeitsmerkmale des Zielendpunkts an.- Die Schleife wird beendet, sobald
RunOperationtrue(Erfolg) zurückgibt oder nachdemmaxRetriesVersuche unternommen wurden, je nachdem, was zuerst eintritt. WriteToOperationLogprotokolliert jeden fehlgeschlagenen Versuch im Vorgangsprotokoll, sodass man leicht sehen kann, wie viele Wiederholungen vor Erfolg oder endgültigem Fehler aufgetreten sind.RaiseError(GetLastError())stoppt den Controller-Vorgang und zeigt die letzte Fehlermeldung an, nachdem alle Versuche erschöpft sind.RunOperationist standardmäßig synchron, daher wartet die Schleife, bis jeder Versuch abgeschlossen ist, bevor die nächste Iteration ausgewertet wird.RunOperationunterliegt auch einer Agentenstufen-Beschränkung für synchrone Aufrufe innerhalb einer einzelnenWhile-Schleife (50standardmäßig). Dies liegt weit über jedem typischenmaxRetries-Wert, aber wenn Sie eine ungewöhnlich hohe Wiederholungsanzahl konfigurieren, siehe den Hinweis unterRunOperationfür Details.
Tipp
Ratenlimit-APIs: Wenn Sie nach einer Ratenlimit-Antwort (HTTP 429) erneut versuchen, fügen Sie einen Sleep-Aufruf vor RunOperation hinzu, um zwischen Versuchen zu pausieren (z. B. wartet Sleep(2) 2 Sekunden). Ein sofortiger Wiederholungsversuch führt zu demselben Ratenlimit wiederholt und verlängert das Fehlerfenster.
Tipp
Um die Anzahl der zulässigen Schleifendurchläufe zu begrenzen, setzen Sie $jitterbit.scripting.while.max_iterations vor dem While-Aufruf. Das Standardlimit beträgt 50.000 Iterationen, was weit über jedem praktischen Wiederholungsversuch liegt. Dies ist daher nur erforderlich, wenn Sie anderswo im Projekt ein niedrigeres globales Limit konfiguriert haben.
Integration überprüfen
Stellen Sie die Controller-Operation bereit und führen Sie sie aus. Überprüfen Sie die Operationsprotokolle: Jeder fehlgeschlagene Versuch wird als separater Protokolleintrag angezeigt. Wenn alle Versuche fehlschlagen, zeigt das Protokoll einen Eintrag pro Versuch gefolgt vom endgültigen ausgelösten Fehler. Wenn die Operation bei einem früheren Versuch erfolgreich ist, werden nur die Fehler bis zu diesem Punkt angezeigt.
Um das Wiederholungsverhalten vor dem Ausführen gegen einen Live-Endpunkt zu testen, konfigurieren Sie die Zieloperation vorübergehend so, dass sie fehlschlägt (geben Sie beispielsweise eine ungültige URL in der Verbindung ein), und setzen Sie $maxRetries = 2. Das Protokoll sollte zwei fehlgeschlagene Versuche und einen endgültigen ausgelösten Fehler anzeigen. Stellen Sie die korrekte Konfiguration wieder her, bevor Sie in der Produktion bereitstellen.