【问题标题】:SpringBoot RestTemplate Connection Pooling: Managing Stale ConnectionsSpring Boot RestTemplate 连接池:管理陈旧的连接
【发布时间】:2018-03-15 05:41:42
【问题描述】:

我正在使用带有 ConnectionPooling 的 RestTemplate,使用 PoolingHttpClientConnectionManager 如下代码:

PoolingHttpClientConnectionManager connectionManager = new 
PoolingHttpClientConnectionManager();
    connectionManager.setMaxTotal(DEFAULT_MAX_TOTAL_CONNECTIONS);
    
connectionManager.setDefaultMaxPerRoute(DEFAULT_MAX_CONNECTIONS_PER_ROUTE);
    connectionManager.setMaxPerRoute(new HttpRoute(new 
HttpHost(excConfig.getImsServerEndpoint())), IMS_ROUTE_MAX_CONNECTIONS);

    CloseableHttpClient httpclient = HttpClients.custom().setConnectionManager(connectionManager).build();

    HttpComponentsClientHttpRequestFactory httpReqFactory = new HttpComponentsClientHttpRequestFactory(httpclient);
    httpReqFactory.setReadTimeout(DEFAULT_HTTP_TIMEOUT_MILLISECONDS);
    httpReqFactory.setConnectionRequestTimeout(DEFAULT_HTTP_TIMEOUT_MILLISECONDS);
    httpReqFactory.setConnectTimeout(DEFAULT_HTTP_TIMEOUT_MILLISECONDS);

    restTemplate = new RestTemplate(httpReqFactory);

RestTemplate 是否会自行终止陈旧的连接?还是我需要对此进行一些特定的处理?

【问题讨论】:

    标签: spring spring-boot resttemplate


    【解决方案1】:

    setStaleConnectionCheckEnabled 已过时。

    HttpClients.custom() .setDefaultRequestConfig(RequestConfig.custom().setStaleConnectionCheckEnabled(true)) .setConnectionManager(连接管理器) .build();

    在 HttpClient 4.5.3 中,以下代码有效 -

    PoolingHttpClientConnectionManager connManager 
              = new PoolingHttpClientConnectionManager();
            connManager.setValidateAfterInactivity(20);
    
            HttpClient httpClient = HttpClients.custom().setConnectionManager(connManager).build();
    

    【讨论】:

    • 花花公子的一个问题:即使我们使用 setValidateAfterInactivity(),我们还需要有空闲的监视器线程来关闭空闲的连接吗? ` public Runnable idleConnectionMonitor(PoolingHttpClientConnectionManager pool) { return new Runnable() { @Scheduled(fixedDelayString = "10000") public void run() { if (pool != null) { System.out.println("pool stats>"+ pool.getTotalStats()); //pool.closeExpiredConnections(); //pool.closeIdleConnections(idleConnectionCloseThreshold, TimeUnit.MILLISECONDS); } } }; } `
    【解决方案2】:

    默认情况下不会,但您可以在 CloseableHttpClient 配置中轻松配置。

    CloseableHttpClient httpclient = HttpClients.custom()
        .setDefaultRequestConfig(RequestConfig.custom().setStaleConnectionCheckEnabled(true))
        .setConnectionManager(connectionManager)
        .build();`
    

    来源here

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-15
      • 2011-09-25
      • 2020-04-23
      • 2017-08-02
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多