如何解决与 SpringBoot WebClient 建立的连接过多
我们注意到在使用 SpringBoot 和 WebClient(通过 Reactor Netty)时建立的连接数量非常多。我们希望连接被重用,但似乎并不是这样(连接和通道被关闭,新的一直被创建)。
尽管我们正在调查以检查某些网络层是否没有准确处理 keep-alive
内容,但我们仍希望确保我们对 WebClient 的使用是正确的。
它们是这样创建的(并且只创建一次):
final HttpClient httpClient =
HttpClient.create(ConnectionProvider.builder(connexionPoolName)
.maxConnections(maxConnections)
.maxIdleTime(maxIdleTime)
.maxLifeTime(maxLifeTime)
.pendingAcquireTimeout(pendingAcquireTimeout)
.metrics(enableMetrics)
.build())
.secure()
.keepAlive(soKeepAlive) // true
.tcpConfiguration(tcpClient -> tcpClient
.doOnConnected(connection -> connection
.addHandlerLast(
new ReadTimeoutHandler((int) this.readTimeout.toMillis(),TimeUnit.MILLISECONDS))
)
.doOnConnected(connection -> connection
.addHandlerLast(
new WriteTimeoutHandler((int) this.socketTimeout.toMillis(),TimeUnit.MILLISECONDS))
)
.option(ChannelOption.so_KEEPALIVE,this.soKeepAlive) // true
.option(ChannelOption.TCP_NODELAY,this.tcpNoDelay) // true
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS,(int) this.connectTimeout.toMillis())
);
return builder.clientConnector(new ReactorClientHttpConnector(httpClient))
.baseUrl(this.baseUrl)
.build();
注意:以前稍微轻一点,但我们尝试在客户端和渠道选项方面强制执行,而没有看到任何变化。
从网络客户端的使用来看,这没什么神奇的。大多数时候是这样的:
return webClient.get()
.uri("/my_uri/{}/{}",vars)
.retrieve()
.bodyToMono(MyClass.class);
我们希望在客户端创建中是否有明显的东西可以阻止它重用连接。
版本:JDK 8、spring boot 2.2.8.RELEASE、Reactor Netty 0.9.5.RELEASE。
(是的,它需要升级,我们正在处理中^^)。
谢谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。