我正在尝试在我的WebClient上设置超时,这是当前代码:
SslContext sslContext = SslContextBuilder.forClient().trustManager(InsecureTrustManagerFactory.INSTANCE).build();
ClientHttpConnector httpConnector = new ReactorClientHttpConnector(opt -> {
opt.sslContext(sslContext);
HttpClientOptions option = HttpClientOptions.builder().build();
opt.from(option);
});
return WebClient.builder().clientConnector(httpConnector).defaultHeader("Authorization", xxxx)
.baseUrl(this.opusConfig.getBaseURL()).build();
我需要添加超时和汇集策略,我正在考虑这样的事情:
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(this.applicationConfig.getHttpClientMaxPoolSize());
cm.setDefaultMaxPerRoute(this.applicationConfig.getHttpClientMaxPoolSize());
cm.closeIdleConnections(this.applicationConfig.getServerIdleTimeout(), TimeUnit.MILLISECONDS);
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(this.applicationConfig.getHttpClientSocketTimeout())
.setConnectTimeout(this.applicationConfig.getHttpClientConnectTimeout())
.setConnectionRequestTimeout(this.applicationConfig.getHttpClientRequestTimeout()).build();
CloseableHttpClient httpClient = HttpClients.custom().setDefaultRequestConfig(requestConfig).setConnectionManager(cm).build();
但我无法弄清楚如何在我的webclient中设置httpClient
4 回答
WebFlux
WebClient
不使用Apache Commons HTTP Client . 虽然您可以通过自定义ClientHttpConnector
实现一个解决方案 . 现有的ReactorClientHttpConnector
基于Netty . 因此,请考虑使用Netty选项来配置客户端,例如:要么
UPDATE
我们也可以使用
ReadTimeoutHandler
:要设置读取和连接超时,我使用下面的方法,因为SO_TIMEOUT选项不适用于使用NIO的通道(并提供警告
Unknown channel option 'SO_TIMEOUT' for channel '[id: 0xa716fcb2]'
)这是我的表现(感谢@Artem)
ReactorClientHttpConnector API在版本Spring WebFlux 5.1中更改 .
所以我做了以下(Kotlin语法,基于@joshiste示例):