Örnek
Şöyle yaparız
this.retryBackoffSpec = Retry.backoff(maxAttempts, Duration.ofSeconds(backoffSeconds)).doBeforeRetry(retrySignal -> log.debug("Waiting {} seconds. Retry #{} of {} after exception: {}", backoffSeconds, (retrySignal.totalRetriesInARow()+1), maxAttempts, retrySignal.failure().getLocalizedMessage() )) .onRetryExhaustedThrow((retryBackoffSpec, retrySignal) -> retrySignal.failure()); this.webClient.post().uri(uri) .bodyValue(emailText) .retrieve() … .bodyToMono(CtfdUserResponse.class) .retryWhen(retryBackoffSpec) .block();
Şöyle yaparız
WebClient webClient = WebClient.builder().baseUrl("http://example.com").build();Mono<String> response = webClient.get().uri("/retry-endpoint").retrieve().bodyToMono(String.class)// number of retries and backoff configuration.retryWhen(Retry.backoff(3, Duration.ofSeconds(1))// maximum backoff time.maxBackoff(Duration.ofSeconds(10)))// fallback if retries all fail.onErrorResume(e -> Mono.just("Fallback response"));response.subscribe(result -> System.out.println(result));
Örnek
Şöyle yaparız
Predicate<Throwable> exceptionFilter() { return throwable -> throwable instanceof RuntimeException || (throwable instanceof WebClientResponseException && (throwable.getStatusCode() == HttpStatus.GATEWAY_TIMEOUT || throwable.getStatusCode() == HttpStatus.SERVICE_UNAVAILABLE || throwable.getStatusCode() == HttpStatus.BAD_GATEWAY)); } Retry retry = Retry.backoff(3, Duration.ofSeconds(2)) .jitter(0.7) .filter(exceptionFilter()) .onRetryExhaustedThrow((retrySpec, retrySignal) -> { log.error("Service at {} failed to respond, after max attempts of: {}", uri, retrySignal.totalRetries()); return retrySignal.failure(); });
Hiç yorum yok:
Yorum Gönder