【问题标题】:Multiple timeouts for request spring WebFLux请求spring WebFLux的多次超时
【发布时间】:2025-12-17 16:35:01
【问题描述】:

您好,我正在使用来自 spring webflux 的 webClient。我有一些代码,例如:

@Configuration
class WebClientConfig(
    @Value("\${url}")
    private val url: String
) {

    @Bean
    @Primary
    fun webClient(): WebClient {
        return createWebClient(700)
    }

    @Bean("more_timeout")
    fun webClientMoreTimeout(): WebClient {
        return createWebClient(3000)
    }

    private fun createWebClient(timeout: Int): WebClient{
        val httpClient = HttpClient.create()
            .tcpConfiguration { client -> client.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, timeout) }
        return WebClient.builder()
            .baseUrl(url)
            .clientConnector(ReactorClientHttpConnector(httpClient))
            .build()
    }
}

这个配置是因为我需要不同超时的调用。假设我有一个对我的响应非常重要的服务 A,所以我想等待最多 3 秒的响应,并且假设你有另一个服务 B、C 等,这对我的响应不是很重要,我只会等待700 毫秒生成响应。我可以向谁存档? 以前的配置不起作用,因为 webClient 是不可变的。

【问题讨论】:

    标签: spring kotlin netty webclient spring-webflux


    【解决方案1】:

    我认为您不能在 webClient 级别执行此操作,但您可以在 Reactor 级别执行此操作,例如:

     return webClient.post()
            .uri { uriBuilder ->
                uriBuilder.path(PATH)
                    .build()
            }
            .body(BodyInserters.fromObject(Request()))
            .accept(MediaType.APPLICATION_JSON_UTF8)
            .exchange()
            .timeout(Duration.ofMillis(1000L))
    

    【讨论】: