Webservicetemplate PoolighttpClientConnectionManager-TTL构造函数和;相关问题

Webservicetemplate PoolighttpClientConnectionManager-TTL构造函数和;相关问题,webservicetemplate,Webservicetemplate,我正在创建HttpComponentMessageSender bean,如下所示 @Bean public HttpComponentsMessageSender reservationHttpComponent() { HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender(); httpComponentsMessage

我正在创建HttpComponentMessageSender bean,如下所示

    @Bean
    public HttpComponentsMessageSender reservationHttpComponent() {
        HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender();
        httpComponentsMessageSender.setConnectionTimeout(reservationConnectionTimeOut);
        httpComponentsMessageSender.setReadTimeout(reservationReadTimeOut);
        return httpComponentsMessageSender;
    }
这里我遇到了间歇性的读取超时问题——比如,如果我在30分钟的休息后第一次尝试读取超时,之后所有进一步的事务都会成功。如果再次中断30分钟,则第一次交易再次失败,出现读取超时问题,然后所有后续交易均成功

我试图修复如下代码-

   @Bean
   public HttpComponentsMessageSender reservationHttpComponent() {
        RequestConfig requestBuilder = RequestConfig.custom()
                .setSocketTimeout(reservationReadTimeOut)
                .setConnectionRequestTimeout(reservationConnectionTimeOut)
                .setConnectTimeout(reservationConnectionTimeOut)
                .setCircularRedirectsAllowed(false)
                .build();
        org.apache.http.client.HttpClient httpClient = HttpClientBuilder.create()
                .setConnectionManager(getConnManager())
                .addInterceptorFirst(new HttpComponentsMessageSender.RemoveSoapHeadersInterceptor())
                .setDefaultRequestConfig(requestBuilder)
                .build();
        HttpComponentsMessageSender messageSender = new HttpComponentsMessageSender();
        messageSender.setHttpClient(httpClient);
        return messageSender;
    }

    private PoolingHttpClientConnectionManager getConnManager() {
        PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();
        connectionManager.setDefaultMaxPerRoute(connectionManagerDefaultMaxPerRoute);
        connectionManager.setMaxTotal(connectionManagerMaxTotal);
        connectionManager.setDefaultSocketConfig(SocketConfig.custom()
                .setSoTimeout(reservationReadTimeOut).build());
        return connectionManager;
    }
上面已经解决了读取超时问题,但我已经开始解决下面的问题-

message:Error Occurred While Retrieving Reservation - I/O error: Timeout waiting for connection from pool; nested exception is org.apache.http.conn.ConnectionPoolTimeoutException: Timeout waiting for connection from pool
我正在寻找修复程序,然后尝试使用TTL初始化PoollightTPClientConnectionManager-

PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(1, TimeUnit.MINUTES)

然后,我运行了多性能jmx脚本,在我的服务上启动了70-80个TPS,这些TPS包含上述外部依赖代码,看起来都不错

但是,我不确定在PoollightTPClientConnectionManager构造函数中使用TTL是否是非常合适的解决方案。。因此,我在这里寻找建议,看看这个解决方案是否会导致任何进一步的问题,或者这可能是一个比这更好的方法