In diesem Dokument wird beschrieben, wie Sie Wiederholungsversuche für ereignisgesteuerte Cloud Run-Funktionen konfigurieren.
Wie unter Ereignisse wiederholen beschrieben, wird eine Pub/Sub-Nachricht standardmäßig mit exponentiellem Backoff noch einmal gesendet, wenn das Ziel der Nachricht sie nicht bestätigen kann. Mit exponentiellem Backoff können Sie zwischen Wiederholungsversuchen schrittweise längere Verzögerungen hinzufügen. Dies ist jedoch möglicherweise nicht das gewünschte Verhalten für Ihre spezielle Implementierung.
Die Eigenschaft für Wiederholungsversuche wird nicht für die Funktion selbst, sondern für den Eventarc-Trigger implementiert, der die Funktion aufruft. Dadurch haben Sie mehr Flexibilität. Das bedeutet, dass Sie für Cloud Run-Ziele (einschließlich Cloud Run-Funktionen, die entweder mit der Cloud Run Admin API oder der Cloud Functions v2 API erstellt wurden) einen einzelnen Zustellversuch ohne Wiederholungsversuche konfigurieren können. Dies ist die Standardkonfiguration, wenn Sie einen Eventarc-Trigger in der Google Cloud Console auf der Cloud Run-Seite erstellen. Weitere Informationen finden Sie unter Trigger mit Eventarc erstellen.
Warum ereignisgesteuerte Funktionen nicht abgeschlossen werden
Eine ereignisgesteuerte Funktion kann aufgrund von Fehlern, die im Funktionscode selbst ausgegeben werden, nicht erfolgreich abgeschlossen werden. Mögliche Gründe dafür sind:
- Die Funktion enthält einen Fehler und die Laufzeit löst eine Ausnahme aus
- Die Funktion kann einen Dienstendpunkt nicht erreichen oder überschreitet während des Versuchs eine Zeitüberschreitung.
- Die Funktion löst absichtlich eine Ausnahme aus (z. B. wenn die Validierung eines Parameters fehlschlägt).
- Eine Node.js-Funktion gibt ein abgelehntes Promise zurück oder übergibt einen Wert ungleich
nullan einen Callback. - In seltenen Fällen kann eine Funktion aufgrund eines internen Fehlers vorzeitig beendet werden. Je nach angegebener Standardeinstellung für diese Funktion werden dann Wiederholungsversuche mit der Funktion durchgeführt oder nicht.
In allen diesen Fällen wird die Ausführung der Funktion beendet und ein Fehler zurückgegeben. Für Ereignistrigger, die die Nachrichten erzeugen, gibt es Richtlinien für Wiederholungsversuche, die Sie an die Anforderungen Ihrer Funktion anpassen können.
Richtlinie für Wiederholungsversuche konfigurieren
Je nach den Anforderungen Ihrer Cloud Run-Funktion können Sie die Richtlinie für Wiederholungsversuche über die Richtlinie für Wiederholungsversuche für Pub/Sub-Abos konfigurieren, die Ihrem Eventarc-Trigger zugeordnet ist. So können Sie eine beliebige Kombination der folgenden Einstellungen vornehmen:
- Verkürzen Sie das Zeitfenster für den erneuten Versuch von 7 Tagen auf bis zu nur 10 Minuten.
- Ändern Sie die minimale und maximale Backoff-Zeit für die exponentielle Backoff-Strategie für Wiederholungsversuche.
- Ändern Sie die Wiederholungsstrategie so, dass umgehend ein erneuter Versuch unternommen wird.
- Konfigurieren Sie ein Thema für unzustellbare Nachrichten.
- Legen Sie eine maximale und minimale Anzahl von Zustellversuchen fest.
So konfigurieren Sie die Richtlinie für Wiederholungsversuche:
- Schreiben Sie eine HTTP-Funktion.
- Nutzen Sie die Pub/Sub API, um ein Pub/Sub-Abo erstellen und die URL der Funktion als Ziel anzugeben
In der Eventarc-Dokumentation unter Ereignisse wiederholen finden Sie weitere Best Practices, z. B. zum Erstellen ereignisgesteuerter Funktionen, bei denen Wiederholungsversuche möglich sind und die idempotent sind.
Weitere Informationen zum direkten Konfigurieren von Pub/Sub finden Sie in der Pub/Sub-Dokumentation zur Fehlerbehandlung.
Best Practices
In diesem Abschnitt werden Best Practices für den Einsatz von Wiederholungsversuchen beschrieben.
Wiederholungsversuche zur Behebung vorübergehender Fehler verwenden
Da Ihre Funktion bis zur erfolgreichen Ausführung kontinuierlich wiederholt wird, sollten Sie vor dem Aktivieren von Wiederholungsversuchen permanente Fehler wie Programmfehler mithilfe von Tests im Code beseitigen. Wiederholungsversuche sollten am besten für unregelmäßige oder vorübergehende Fehler verwendet werden, bei denen die Wahrscheinlichkeit einer Behebung bei einem erneuten Versuch hoch ist, z. B. bei unzuverlässigen Dienstendpunkten oder Zeitüberschreitungen.
Endbedingung festlegen, um Endlosschleifen zu verhindern
Beim Einsatz von Wiederholungsversuchen ist es eine Best Practice, die Funktion vor Endlosschleifen zu schützen. Dies erreichen Sie beispielsweise, indem Sie eine gut definierte Endbedingung einfügen, bevor die Verarbeitung der Funktion beginnt. Beachten Sie, dass diese Methode nur funktioniert, wenn Ihre Funktion erfolgreich gestartet wird und die Endbedingung auswerten kann.
Ein effektiver Ansatz ist, Ereignisse zu verwerfen, deren Zeitstempel älter als ein bestimmtes Datum ist. Dadurch werden übermäßig viele Ausführungen verhindert, wenn Fehler entweder persistent oder langlebiger als erwartet sind.
Beispielsweise werden durch dieses Code-Snippet alle Ereignisse verworfen, die älter als 10 Sekunden sind:
Node.js
Python
Go
Java
C#
Ruby
PHP
Zwischen Funktionen, bei denen ein Wiederholungsversuch sinnvoll ist, und schwerwiegenden Fehlern unterscheiden
Wenn für Ihre Funktion Wiederholungsversuche aktiviert sind, löst jeder nicht aufgelöste Fehler einen Wiederholungsversuch aus. Achten Sie darauf, dass in Ihrem Code die Fehler erfasst sind, für die keine Wiederholungsversuche ausgelöst werden sollten.
Node.js
Python
Go
Java
C#
Ruby
PHP
Nächste Schritte
- Cloud Run-Funktion bereitstellen
- Trigger aus Pub/Sub-Ereignissen erstellen
- Trigger aus Cloud Storage-Ereignissen erstellen
- Funktionen aus Pub/Sub mit Eventarc auslösen
- Funktionen aus Cloud Storage mit Eventarc auslösen