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.