0 Tage Serie
java / intermediate
Snippet

Nicht-blockierende WebClient-Anfragen mit Timeout und Fallback

Spring WebClient bietet eine vollständig reaktive und nicht-blockierende Alternative zu RestTemplate. Die Kombination reaktiver Operatoren wie timeout() und onErrorReturn() verhindert Thread-Blockaden bei langsamen Downstream-Aufrufen und liefert asynchron zuverlässige Fallback-Werte.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@Service
public class CurrencyConversionService {
private final WebClient webClient;
public CurrencyConversionService(WebClient.Builder builder) {
this.webClient = builder.baseUrl("https://api.fxrates.example.com").build();
}
public Mono<BigDecimal> fetchExchangeRate(String currency) {
return webClient.get()
.uri("/rates/{currency}", currency)
.retrieve()
.bodyToMono(BigDecimal.class)
.timeout(Duration.ofMillis(1500))
.onErrorReturn(TimeoutException.class, BigDecimal.ONE);
}
}
spring
Erklärung
1
private final WebClient webClient;
Deklariert die unveränderliche, reaktive HTTP-Client-Instanz.
2
.bodyToMono(BigDecimal.class)
Dekodiert den Response-Body asynchron in einen einelementigen Project-Reactor-Mono-Datenstrom.
3
.timeout(Duration.ofMillis(1500))
Löst eine TimeoutException aus, wenn der Remote-Dienst nicht innerhalb von 1,5 Sekunden antwortet.
4
.onErrorReturn(TimeoutException.class, BigDecimal.ONE)
Fängt den Timeout-Fehler ab und liefert einen definierten Standard-Wechselkurs zurück.