Aller au contenu

Comment réessayer en utilisant Restclient

Spring-Boot Restclient
Auteur
Harpal Singh
Software Engineer
Traduit par
Namastecode
Sommaire

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.

Articles connexes

Exécuter PostgreSQL dans un conteneur Docker
DevOps Postgres Docker Database