1010import org .apache .commons .logging .LogFactory ;
1111import org .springframework .http .client .reactive .ClientHttpConnector ;
1212import org .springframework .http .client .reactive .ReactorClientHttpConnector ;
13+ import reactor .netty .http .HttpResources ;
1314import reactor .netty .http .client .HttpClient ;
1415import reactor .netty .tcp .TcpClient ;
16+ import reactor .netty .tcp .TcpResources ;
1517import reactor .netty .transport .ProxyProvider ;
1618
1719import javax .net .ssl .SSLException ;
1820import java .time .Duration ;
1921import java .util .Objects ;
2022import java .util .concurrent .TimeUnit ;
2123
24+ import static reactor .netty .resources .LoopResources .DEFAULT_NATIVE ;
25+
2226class NettyClientHttpConnectorBuilder {
2327
2428 private static final Log LOG = LogFactory .getLog (NettyClientHttpConnectorBuilder .class );
2529
26- public static ClientHttpConnector buildNettyClientHttpConnector (WebReactiveOptions webOptions ) {
27- TcpClient tcpClient = TcpClient .create ();
30+ public static ClientHttpConnector buildNettyClientHttpConnector (HttpClient httpClient , WebReactiveOptions webOptions ) {
31+
32+ if (httpClient == null ){
33+ httpClient = HttpClient .create (TcpResources .get ())
34+ .runOn (HttpResources .get (), DEFAULT_NATIVE );
35+ }
36+
2837 if (webOptions .getConnectTimeoutMillis () != null ) {
29- tcpClient = tcpClient .option (ChannelOption .CONNECT_TIMEOUT_MILLIS ,
38+ httpClient = httpClient .option (ChannelOption .CONNECT_TIMEOUT_MILLIS ,
3039 webOptions .getConnectTimeoutMillis ().intValue ());
3140 }
32- tcpClient = tcpClient .doOnConnected (connection -> {
41+
42+ httpClient = httpClient .doOnConnected (connection -> {
3343 if (webOptions .getReadTimeoutMillis () != null ) {
3444 connection .addHandlerLast (new ReadTimeoutHandler (
3545 webOptions .getReadTimeoutMillis (), TimeUnit .MILLISECONDS ));
@@ -42,7 +52,7 @@ public static ClientHttpConnector buildNettyClientHttpConnector(WebReactiveOptio
4252
4353 WebReactiveOptions .WebProxySettings proxySettings = (WebReactiveOptions .WebProxySettings )webOptions .getProxySettings ();
4454 if (proxySettings != null ) {
45- tcpClient = tcpClient .proxy (typeSpec -> {
55+ httpClient = httpClient .proxy (typeSpec -> {
4656 ProxyProvider .Builder proxyBuilder = typeSpec .type (ProxyProvider .Proxy .HTTP )
4757 .host (proxySettings .getHost ())
4858 .port (proxySettings .getPort ())
@@ -54,8 +64,6 @@ public static ClientHttpConnector buildNettyClientHttpConnector(WebReactiveOptio
5464 });
5565 }
5666
57- HttpClient httpClient = HttpClient .from (tcpClient );
58-
5967 if (webOptions .getResponseTimeoutMillis () != null ) {
6068 httpClient = httpClient .responseTimeout (Duration .ofMillis (webOptions .getResponseTimeoutMillis ()));
6169 }
0 commit comments