1. Introduction
Dans ce tutoriel rapide, nous allons apprendre comment implémenter des appels réessayables en utilisant RestClient
avec le soutien de spring-retry
.
Parfois, les connexions réseau peuvent être peu fiables, entraînant des échecs temporaires lors de l’exécution de requêtes HTTP. Il peut y avoir de nombreuses raisons à ces échecs, nous devons donc les gérer de manière systématique.
Nous savons que WebClient
offre un mécanisme de réessai prêt à l’emploi. Cependant, RestClient
a toujours besoin de cette fonctionnalité. Voyons comment utiliser spring-retry
, une bibliothèque qui permet de réessayer les opérations échouées.
2. Configuration de spring-retry
En résumé, spring-retry
propose une approche simple pour implémenter des capacités de réessai via des annotations. De plus, nous pouvons personnaliser le comportement à notre guise. Mais d’abord, nous devons importer la dernière version de spring-retry
et spring-aspects
dans notre projet :
<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>
Maintenant, nous pouvons utiliser l’annotation @Retryable
. Utilisons-la sur une méthode de service qui encapsule un appel à RestClient
.
3. Configurer RestClient
avec @Retryable
Enfin, nous pouvons annoter une méthode avec @Retryable
pour activer la fonctionnalité de réessai. De plus, nous pouvons également personnaliser le comportement de réessai, par exemple, définir une politique de retour en arrière :
@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);
}
}
Au-dessus, nous utilisons @EnableRetry
pour activer la politique de réessai et annoter la méthode de service avec @Retryable
. Cela émule un appel POST à une URI d’exemple et renvoie un String
. Nous devons annoter avec @EnableRetry
; sinon, l’annotation @Retryable
sera ignorée.
3.1. Réessayer en cas d’exceptions
Dans certains cas, nous pouvons vouloir relancer une méthode lorsqu’une exception est levée. Pour cela, nous pouvons utiliser l’attribut retryFor
de l’annotation @Retryable
. Par exemple, nous pouvons réessayer un appel de méthode lorsqu’une CustomException
est levée :
@Retryable(maxAttempts = 5, retryFor = {CustomException.class})
public String performRestCallWithCustomException() {
// ...
// throws CustomException
}
Comme nous pouvons le voir, nous pouvons facilement personnaliser le comportement de nouvelle tentative comme nous le souhaitons.
4. Conclusion
Dans ce tutoriel, nous avons appris comment implémenter un mécanisme de réessai en utilisant RestClient
et spring-retry
. Nous avons également vu comment utiliser l’annotation @Retryable
pour activer la fonctionnalité de réessai et personnaliser le comportement de réessai.
Nous pouvons chercher le code complet sur Github.