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
@Servicepublic 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.