如何在新的Springboot 2.1.4.Release中禁用Webclient中的连接池?

时间:2019-04-10 16:48:34

标签: spring-boot reactor-netty

我正在使用springboot webclient从远程服务器调用rest api。第一个请求工作正常。如果一段时间后我提出了后续请求,服务器将抛出500服务器错误。我得到的错误是“ onError(java.io.IOException:一个现有的连接被远程主机强行关闭)”。

我想通过禁用连接池来测试行为,因为我相信它使用以前的连接。您能帮我在创建webclient时如何禁用连接池吗?

WebClient 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))

        return WebClient.builder()
                .clientConnector(httpConnector)
                .build()

1 个答案:

答案 0 :(得分:1)

您可以使用以下代码禁用连接池

TcpClient tcpClient = TcpClient.newConnection()

使用wiretap(true)检查服务器和客户端之间的流量。

您还可以启用Reactor Netty的日志记录并跟踪连接是否被重用(在连接池方案中)

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来跟踪频道的活动。