【问题标题】:How to disable connection pooling in Webclient in new Springboot 2.1.4.Release?如何在新的 Spring Boot 2.1.4.Release 中禁用 Webclient 中的连接池?
【发布时间】:2019-09-01 05:07:59
【问题描述】:

我正在使用 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()

【问题讨论】:

    标签: spring-boot reactor-netty


    【解决方案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 跟踪频道发生的事情。

    【讨论】:

    猜你喜欢
    • 2023-04-11
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2017-06-22
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    相关资源
    最近更新 更多