如何在新的Springboot 2.1.4.Release中禁用Webclient中的连接池?
How to disable connection pooling in Webclient in new Springboot 2.1.4.Release?
我正在使用 springboot webclient 从远程服务器调用 rest api。第一个请求工作正常。如果我在一段时间后发出后续请求,服务器会抛出 500 服务器错误。我得到的错误是“onError(java.io.IOException:现有连接被远程主机强行关闭)”。
我想测试禁用连接池的行为,因为我相信它使用以前的连接。你能帮我看看如何在创建webclient时禁用连接池吗?
TcpClient tcpClient = TcpClient.create()
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 30000)
.option(ChannelOption.SO_KEEPALIVE, false)
.doOnConnected(connection ->
connection.addHandlerLast(new ReadTimeoutHandler(30))
.addHandlerLast(new WriteTimeoutHandler(30))
);
ReactorClientHttpConnector httpConnector = new ReactorClientHttpConnector(HttpClient.from(tcpClient));
final WebClient webClient = WebClient
.builder()
.clientConnector(httpConnector)
.baseUrl("http://customer.service.api.internal.cloud.qa.intranet.pagseguro.uol")
.exchangeStrategies(strategies)
.build()
您可以使用以下代码禁用连接池
TcpClient tcpClient = TcpClient.newConnection()
使用wiretap(true)
检查服务器和客户端之间的流量。
你也可以开启Reactor Netty的logging,追踪连接是否被复用(连接池场景)
logging.level.reactor.netty=debug
如果重新使用连接,您将看到
2019-04-11 18:52:10.049 DEBUG 98105 --- [ctor-http-nio-5] r.n.resources.PooledConnectionProvider : [id: 0x897584fa, L:/<IP>:<PORT> - R:/<IP>:<PORT>] Channel acquired, now 1 active connections and 0 inactive connections
您还可以使用频道 ID id: 0x897584fa
跟踪频道的动态。
我正在使用 springboot webclient 从远程服务器调用 rest api。第一个请求工作正常。如果我在一段时间后发出后续请求,服务器会抛出 500 服务器错误。我得到的错误是“onError(java.io.IOException:现有连接被远程主机强行关闭)”。
我想测试禁用连接池的行为,因为我相信它使用以前的连接。你能帮我看看如何在创建webclient时禁用连接池吗?
TcpClient tcpClient = TcpClient.create()
.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 30000)
.option(ChannelOption.SO_KEEPALIVE, false)
.doOnConnected(connection ->
connection.addHandlerLast(new ReadTimeoutHandler(30))
.addHandlerLast(new WriteTimeoutHandler(30))
);
ReactorClientHttpConnector httpConnector = new ReactorClientHttpConnector(HttpClient.from(tcpClient));
final WebClient webClient = WebClient
.builder()
.clientConnector(httpConnector)
.baseUrl("http://customer.service.api.internal.cloud.qa.intranet.pagseguro.uol")
.exchangeStrategies(strategies)
.build()
您可以使用以下代码禁用连接池
TcpClient tcpClient = TcpClient.newConnection()
使用wiretap(true)
检查服务器和客户端之间的流量。
你也可以开启Reactor Netty的logging,追踪连接是否被复用(连接池场景)
logging.level.reactor.netty=debug
如果重新使用连接,您将看到
2019-04-11 18:52:10.049 DEBUG 98105 --- [ctor-http-nio-5] r.n.resources.PooledConnectionProvider : [id: 0x897584fa, L:/<IP>:<PORT> - R:/<IP>:<PORT>] Channel acquired, now 1 active connections and 0 inactive connections
您还可以使用频道 ID id: 0x897584fa
跟踪频道的动态。