Wiederholung
In diesem Kapitel wird der Wiederholungsmechanismus von Go Resty-Anfragen vorgestellt.
Resty verwendet Backoff, um das Wiederholungsintervall nach jeder Wiederholung zu erhöhen.
Beispiel für die Verwendung:
// Resty-Client erstellen
client := resty.New()
// Die Konfiguration der Wiederholungsanzahl erfolgt auf jedem Client
client.
// Setzen einer Nicht-Null-Wiederholungsanzahl, um Wiederholungen zu aktivieren
SetRetryCount(3).
// Sie können die initiale Wartezeit für die Wiederholung anpassen.
// Standardmäßig sind es 100 Millisekunden.
SetRetryWaitTime(5 * time.Second).
// MaxWaitTime kann ebenfalls überschrieben werden.
// Standardmäßig sind es 2 Sekunden.
SetRetryMaxWaitTime(20 * time.Second).
// Setzen von RetryAfter, um die Callback-Funktion zur Berechnung der Wartezeit zwischen Wiederholungen festzulegen.
// Der Standardwert (nil) bedeutet, dass die Wartezeit mit exponentiellem Backoff und Zufallsabweichung verwendet wird.
SetRetryAfter(func(client *resty.Client, resp *resty.Response) (time.Duration, error) {
return 0, errors.New("Quotum überschritten")
})
Standardmäßig wird resty Anfragen, die während der Ausführung nicht-null-Fehler zurückgeben, wiederholen. Daher werden die obigen Einstellungen resty dazu veranlassen, Anfragen, die nicht-null-Fehler zurückgeben, wiederholen und dabei die Verzögerung nach jedem Versuch erhöhen, bis zu maximal 3 Wiederholungen.
Sie können auch benutzerdefinierte Wiederholungsbedingungen für den Client angeben:
// Resty-Client erstellen
client := resty.New()
client.AddRetryCondition(
// RetryConditionFunc-Typ wird für die Wiederholungsbedingungsfunktionen verwendet
// Eingabe: nicht-null Antwort ODER Anfrageausführungsfehler
func(r *resty.Response, err error) bool {
return r.StatusCode() == http.StatusTooManyRequests
},
)
Das obige Beispiel wird resty dazu veranlassen, Anfragen zu wiederholen, die mit dem Statuscode 429 Zu viele Anfragen
enden. Es ist wichtig zu beachten, dass bei der Angabe von Bedingungen mit AddRetryCondition
das standardmäßige Wiederholungsverhalten überschrieben wird, nämlich das Wiederholen beim Auftreten von Fehlern während des Anfrageprozesses. Wenn Sie das Wiederholen als Standardverhalten wünschen, wenn während des Anfrageprozesses Fehler aufgetreten sind, müssen Sie es wie folgt konfigurieren:
// Resty-Client erstellen
client := resty.New()
client.AddRetryCondition(
func(r *resty.Response, err error) bool {
// "err != nil" einbeziehen, um das standardmäßige Wiederholungsverhalten bei Fehlern während des Anfrageprozesses zu simulieren.
return err != nil || r.StatusCode() == http.StatusTooManyRequests
},
)
Es können mehrere Wiederholungsbedingungen hinzugefügt werden. Es ist wichtig zu beachten, dass wenn mehrere Bedingungen angegeben werden, bei Erfüllung einer beliebigen Bedingung eine Wiederholung durchgeführt wird.
Mit resty.Backoff(...)
können auch beliebige Wiederholungsszenarien implementiert werden.