webflux超时时间配置

1 全局配置 Configuring Timeouts via HTTP Client
1.1 Response Timeout

HttpClient client = HttpClient.create() .responseTimeout(Duration.ofSeconds(1)); WebClient webClient = WebClient.builder() .clientConnector(new ReactorClientHttpConnector(client)) .build();

1.2 Connection Timeout
HttpClient client = HttpClient.create() .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10000);

默认是30s, 如果在给定的时间不能成功建立连接或者被丢弃掉,将抛出ConnectTimeoutException,此外还可以设置一些tcp参数
HttpClient client = HttpClient.create() .option(ChannelOption.SO_KEEPALIVE, true) .option(EpollChannelOption.TCP_KEEPIDLE, 300) .option(EpollChannelOption.TCP_KEEPINTVL, 60) .option(EpollChannelOption.TCP_KEEPCNT, 8);

1.3 Read and Write Timeout HttpClient client = HttpClient.create()
.doOnConnected(conn -> conn
.addHandler(new ReadTimeoutHandler(10, TimeUnit.SECONDS)) .addHandler(new WriteTimeoutHandler(10)));

1.4 SSL/TLS Timeout
HttpClient.create() .secure(spec -> spec.sslContext(SslContextBuilder.forClient()) .defaultConfiguration(SslProvider.DefaultConfigurationType.TCP) .handshakeTimeout(Duration.ofSeconds(30)) .closeNotifyFlushTimeout(Duration.ofSeconds(10)) .closeNotifyReadTimeout(Duration.ofSeconds(10)));

handshake timeout默认是10s
close_notify flush默认3s
read默认0s
1.5 Proxy Timeout
HttpClient.create() .proxy(spec -> spec.type(ProxyProvider.Proxy.HTTP) .host("proxy") .port(8080) .connectTimeoutMillis(30000));

【webflux超时时间配置】connectTimeoutMillis默认10s
2 Request-Level配置
2.1 Response Timeout
webClient.get() .uri("https://baeldung.com/path") .httpRequest(httpRequest -> { HttpClientRequest reactorRequest = httpRequest.getNativeRequest(); reactorRequest.responseTimeout(Duration.ofSeconds(2)); });

2.2 Reactive Timeout
webClient.get() .uri("https://baeldung.com/path") .retrieve() .bodyToFlux(JsonNode.class) .timeout(Duration.ofSeconds(5));

    推荐阅读