Salta al contenuto principale

Come Riprovare Utilizzando Restclient

Spring-Boot Restclient
Autore
Harpal Singh
Software Engineer
Tradotto da
Namastecode
Indice dei contenuti

1. Introduzione

In questo breve tutorial, impareremo come implementare chiamate ripetibili utilizzando RestClient con il supporto di spring-retry.

A volte, le connessioni di rete possono essere inaffidabili, portando a guasti temporanei nella creazione di richieste HTTP. Ci possono essere molte ragioni per questi guasti, quindi dobbiamo gestirli in modo sistematico.

Sappiamo che WebClient offre un meccanismo di ripetizione pronto all’uso. Tuttavia, RestClient ha ancora bisogno di questa funzionalità. Vediamo come utilizzare spring-retry, una libreria che consente di ripetere le operazioni fallite.

2. Configurare spring-retry

In breve, spring-retry offre un approccio semplice per implementare capacità di ripetizione tramite annotazioni. Inoltre, possiamo personalizzare il comportamento come desideriamo. Ma prima, dobbiamo importare l’ultima versione di spring-retry e spring-aspects nel nostro progetto:

<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>

Ora, possiamo utilizzare l’annotazione @Retryable. Utilizziamola su un metodo di servizio che incapsula una chiamata RestClient.

3. Configurare RestClient con @Retryable

Infine, possiamo annotare un metodo con @Retryable per abilitare la funzionalità di ripetizione. Inoltre, possiamo anche personalizzare il comportamento di ripetizione, ad esempio, definire una politica di backoff:

@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);
    }
}

Sopra, utilizziamo @EnableRetry per attivare la politica di ripetizione e annotiamo il metodo di servizio con @Retryable. Questo emula una chiamata POST a un URI di esempio e restituisce un String. Dobbiamo annotare con @EnableRetry; altrimenti, l’annotazione @Retryable verrà ignorata.

3.1. Ritentare In Caso di Eccezioni

In alcuni casi, potremmo voler rieseguire un metodo quando viene sollevata un’eccezione. Per questo, possiamo utilizzare l’attributo retryFor dell’annotazione @Retryable. Ad esempio, possiamo riprovare una chiamata al metodo quando viene sollevata una CustomException:

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

Come possiamo vedere, possiamo facilmente personalizzare il comportamento di ripetizione come desideriamo.

4. Conclusione

In questo tutorial, abbiamo imparato come implementare un meccanismo di ripetizione utilizzando RestClient e spring-retry. Abbiamo anche visto come utilizzare l’annotazione @Retryable per abilitare la funzionalità di ripetizione e personalizzare il comportamento di ripetizione.

Possiamo cercare il codice completo su Github.

Related

Eseguire PostgreSQL in un Contenitore Docker
DevOps Postgres Docker Database