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.