Zum Hauptinhalt springen

Wie man mit Restclient einen Retry durchführt

Spring-Boot Restclient
Autor
Harpal Singh
Software Engineer
Übersetzt von
Namastecode
Inhaltsverzeichnis

1. Einführung

In diesem kurzen Tutorial lernen wir, wie wir wiederholbare Aufrufe mit RestClient unter Verwendung von spring-retry implementieren können.

Manchmal können Netzwerkverbindungen unzuverlässig sein, was zu temporären Fehlern bei HTTP-Anfragen führen kann. Es gibt viele Gründe für diese Fehler, daher müssen wir sie systematisch behandeln.

Wir wissen, dass WebClient einen integrierten Wiederholungsmechanismus bietet. Allerdings fehlt diese Funktionalität noch bei RestClient. Lassen Sie uns sehen, wie wir spring-retry verwenden können, eine Bibliothek, die erlaubt, fehlgeschlagene Operationen zu wiederholen.

2. Einrichtung von spring-retry

Kurz gesagt, bietet spring-retry einen einfachen Ansatz zur Implementierung von Wiederholungsfunktionen durch Annotationen. Darüber hinaus können wir das Verhalten nach unseren Wünschen anpassen. Zuerst müssen wir jedoch die neueste Version von spring-retry und spring-aspects in unser Projekt importieren:

<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
    <version>2.0.5</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-aspects</artifactId>
    <version>6.1.4</version>
</dependency>

Nun können wir die Annotation @Retryable verwenden. Lassen Sie uns diese auf eine Servicemethode anwenden, die einen RestClient-Aufruf kapselt.

3. RestClient mit @Retryable konfigurieren

Schließlich können wir eine Methode mit @Retryable annotieren, um die Wiederholungsfunktionalität zu aktivieren. Darüber hinaus können wir auch das Wiederholungsverhalten anpassen, indem wir beispielsweise eine Backoff-Strategie definieren:

@EnableRetry
public class ExampleService {
    @Retryable(maxAttempts = 5, backoff = @Backoff(delay = 1000))
    public String performRestCall() {
        return restClient
        .get()
        .uri("https://example.com")
        .retrieve()
        .body(String.class);
    }
}

Oben verwenden wir @EnableRetry, um die Retry-Politik zu aktivieren, und annotieren die Servicemethode mit @Retryable. Dies emuliert einen Post-Aufruf zu einer Beispiel-URI und gibt einen String zurück. Wir müssen mit @EnableRetry annotieren; andernfalls wird die @Retryable Annotation ignoriert.

3.1. Wiederholungen bei Ausnahmen

In manchen Fällen möchten wir eine Methode erneut ausführen, wenn eine Ausnahme ausgelöst wird. Dafür können wir das retryFor-Attribut der @Retryable-Annotation verwenden. Zum Beispiel können wir einen Methodenaufruf wiederholen, wenn eine CustomException ausgelöst wird:

@Retryable(maxAttempts = 5, retryFor = {CustomException.class})
public String performRestCallWithCustomException() {
    // ...
    // throws CustomException
}

Wie wir sehen können, können wir das Wiederholungsverhalten ganz nach unseren Wünschen anpassen.

4. Fazit

In diesem Tutorial haben wir gelernt, wie man einen Wiederholungsmechanismus mit RestClient und spring-retry implementiert. Wir haben auch gesehen, wie man die @Retryable Annotation verwendet, um die Wiederholungsfunktionalität zu aktivieren und das Wiederholungsverhalten anzupassen.

Wir können den vollständigen Code auf Github finden.

Verwandte Artikel

# Ausführen von PostgreSQL in einem Docker-Container
DevOps Postgres Docker Database