


How to implement a retry strategy from serverB to serverC using Spring WebFlux when building LLM gateway?
Retry mechanism for building LLM gateway using Spring WebFlux
When building an LLM gateway, communication between services needs to be handled and ensure that when a service is unavailable, it is possible to switch to the backup service seamlessly. This article will explore how to achieve this using Spring WebFlux, especially if gateway to Server B communication fails, how to retry and connect to Server C.
Scene description
Our LLM gateway call link is: Client-> Gateway-> Server B. If the gateway connection to Server B fails, we want the gateway to be able to retry and connect to Server C. This requires that the gateway can capture the error response code of Server B and automatically switch to Server C on failure.
Code analysis and improvement solutions
Let's first look at the original sseHttp
method, which handles gateway requests to Server B or Server C:
Flux<response> responseFlux = webClient.create(url) .post() .headers(httpHeaders -> setHeaders(httpHeaders, headers)) .contentType(MediaType.APPLICATION_JSON) .bodyValue(jsonBody) .retrieve() .onStatus(status -> status != HttpStatus.OK, response -> { // Error handling logic}) // ...Other logic...</response>
In order to implement the retry strategy, we need to capture the error response code of Server B and switch to Server C when an error occurs. There are some problems with previous attempts: simple try-catch
cannot catch errors inside Flux
; the subscribe
method is non-blocking, resulting in the error handling logic not taking effect in time.
Best Practice: Utilize retryWhen
and onErrorResume
To solve the above problem, we should take advantage of retryWhen
and onErrorResume
operators provided by Spring WebFlux.
First, modify the sseHttp
method and add retry logic:
Flux<response> sseHttp(String url) { return webClient.create(url) .post() .headers(httpHeaders -> setHeaders(httpHeaders, headers)) .contentType(MediaType.APPLICATION_JSON) .bodyValue(jsonBody) .retrieve() .onStatus(HttpStatus::isError, clientResponse -> { // Record error logs to facilitate debugging return Mono.error(new WebClientResponseException("Server returned error status: " clientResponse.rawStatusCode(), clientResponse.rawStatusCode(), clientResponse.headers().asHttpHeaders(), clientResponse.bodyToMono(String.class).block(), null)); }) .bodyToFlux(typeRef) .retryWhen(Retry.backoff(3, Duration.ofSeconds(1)) .filter(throwable -> throwable instanceof WebClientResponseException) .onRetryExhaustedThrow((spec, signal) -> new GatewayException("Failed to connect to both Server B and Server C after multiple retries."))); }</response>
This code uses onStatus
to process HTTP error status codes and retry with retryWhen
, retry up to 3 times, each time interval of 1 second. filter
ensures that only exceptions of type WebClientResponseException
are retryed. If the number of retrys is exhausted, GatewayException
is thrown.
Then, where sseHttp
is called, use onErrorResume
to handle the failure of Server B and switch to Server C:
Mono<response> responseMono = sseHttp(serverBUrl) .onErrorResume(WebClientResponseException.class, ex -> { log.warn("Failed to connect to Server B: {}", ex.getMessage()); // Log error log return sseHttp(serverCUrl); }) .next();</response>
This code first tries to connect to Server B, and if WebClientResponseException
occurs, it tries to connect to Server C. The next()
method ensures that only one result is returned.
Handle multiple successful responses
If both Server B and Server C successfully return data, we need to make sure that only one response is processed. An AtomicBoolean
variable can be used to track whether the response has been processed successfully:
AtomicBoolean success = new AtomicBoolean(false); Flux<response> sseHttp(String url) { // ... (previous code) ... .doOnNext(response -> { if (success.compareAndSet(false, true)) { // Processing a successful response} }) // ... (rest of the code) ... }</response>
Through the above improvements, we have implemented a more robust retry mechanism that can effectively handle communication failures between services and ensure high availability of LLM gateways. Remember to add sufficient logging to facilitate troubleshooting.
The above is the detailed content of How to implement a retry strategy from serverB to serverC using Spring WebFlux when building LLM gateway?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

WorldCoin (WLD) stands out in the cryptocurrency market with its unique biometric verification and privacy protection mechanisms, attracting the attention of many investors. WLD has performed outstandingly among altcoins with its innovative technologies, especially in combination with OpenAI artificial intelligence technology. But how will the digital assets behave in the next few years? Let's predict the future price of WLD together. The 2025 WLD price forecast is expected to achieve significant growth in WLD in 2025. Market analysis shows that the average WLD price may reach $1.31, with a maximum of $1.36. However, in a bear market, the price may fall to around $0.55. This growth expectation is mainly due to WorldCoin2.

Factors of rising virtual currency prices include: 1. Increased market demand, 2. Decreased supply, 3. Stimulated positive news, 4. Optimistic market sentiment, 5. Macroeconomic environment; Decline factors include: 1. Decreased market demand, 2. Increased supply, 3. Strike of negative news, 4. Pessimistic market sentiment, 5. Macroeconomic environment.

The steps to draw a Bitcoin structure analysis chart include: 1. Determine the purpose and audience of the drawing, 2. Select the right tool, 3. Design the framework and fill in the core components, 4. Refer to the existing template. Complete steps ensure that the chart is accurate and easy to understand.

Exchanges that support cross-chain transactions: 1. Binance, 2. Uniswap, 3. SushiSwap, 4. Curve Finance, 5. Thorchain, 6. 1inch Exchange, 7. DLN Trade, these platforms support multi-chain asset transactions through various technologies.

Aavenomics is a proposal to modify the AAVE protocol token and introduce token repos, which has implemented a quorum for AAVEDAO. Marc Zeller, founder of the AAVE Project Chain (ACI), announced this on X, noting that it marks a new era for the agreement. Marc Zeller, founder of the AAVE Chain Initiative (ACI), announced on X that the Aavenomics proposal includes modifying the AAVE protocol token and introducing token repos, has achieved a quorum for AAVEDAO. According to Zeller, this marks a new era for the agreement. AaveDao members voted overwhelmingly to support the proposal, which was 100 per week on Wednesday

Cryptocurrency data platforms suitable for beginners include CoinMarketCap and non-small trumpet. 1. CoinMarketCap provides global real-time price, market value, and trading volume rankings for novice and basic analysis needs. 2. The non-small quotation provides a Chinese-friendly interface, suitable for Chinese users to quickly screen low-risk potential projects.

In the bustling world of cryptocurrencies, new opportunities always emerge. At present, KernelDAO (KERNEL) airdrop activity is attracting much attention and attracting the attention of many investors. So, what is the origin of this project? What benefits can BNB Holder get from it? Don't worry, the following will reveal it one by one for you.

In the volatile cryptocurrency market, investors are looking for alternatives that go beyond popular currencies. Although well-known cryptocurrencies such as Solana (SOL), Cardano (ADA), XRP and Dogecoin (DOGE) also face challenges such as market sentiment, regulatory uncertainty and scalability. However, a new emerging project, RexasFinance (RXS), is emerging. It does not rely on celebrity effects or hype, but focuses on combining real-world assets (RWA) with blockchain technology to provide investors with an innovative way to invest. This strategy makes it hoped to be one of the most successful projects of 2025. RexasFi
