I want to implement retry mechanism and I did something like this:
JavaScript
x
public static final Retry fixedRetry = Retry.fixedDelay(3, Duration.ofSeconds(5))
.onRetryExhaustedThrow(
(retryBackoffSpec, retrySignal) -> new TimeoutException(
retrySignal.failure().getMessage()));
And used this method here:
JavaScript
public List<A> findByTimestamp(LocalDate localDate) {
return webClient.get()
.uri(bProp.getPath())
.header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
.retrieve()
.bodyToFlux(bData.class)
.retryWhen(fixedRetry)
.map(this::toC)
.collectList()
.block();
}
But I want to create a generic one to use it across all application to not write first method in all classes, how can I do this more efficiently?
Advertisement
Answer
The way that I decided to implement this is as follows:
JavaScript
public class RetryWebClient {
public static final Retry fixedRetry = Retry.fixedDelay(3, Duration.ofSeconds(5))
.onRetryExhaustedThrow(
(retryBackoffSpec, retrySignal) -> new TimeoutException(
retrySignal.failure().getMessage()));
private RetryWebClient() {}
}
And called it in retryWhen
:
JavaScript
.retryWhen(RetryWebClient.fixedRetry)