Apacha HttpClient配置

时间:2019-01-17 23:18:48

标签: apache-httpclient-4.x apache-httpcomponents

我当前在我的Web服务器中使用Apache HTTP客户端4.5.6支持的RestTemplate来发出HTTP请求。我的HttpClient配置如下:

PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();

        connectionManager.setMaxTotal(httpConfigurationProperties.getConnection().getMaxTotal());
        connectionManager.setDefaultMaxPerRoute(httpConfigurationProperties.getConnection()

        return HttpClients.custom()
                .setDefaultRequestConfig(RequestConfig
                    .custom()
                    .setConnectionRequestTimeout((int) httpConfigurationProperties.getTimeout().getConnectionRequestTimeout().toMillis())
                    .setConnectTimeout((int) httpConfigurationProperties.getTimeout().getConnectTimeout().toMillis())
                    .setSocketTimeout((int) httpConfigurationProperties.getTimeout().getReadTimeout().toMillis())
                    .build())
                .setRetryHandler(StandardHttpRequestRetryHandler.INSTANCE)
                .setConnectionManager(connectionManager)
                .build();

当我进行HTTP GET时,偶尔会看到以下内容:

  

处理时捕获到I / O异常(java.net.SocketException)   {s}->请求:连接重置

我在另一篇文章中读到这是由于服务器(我正在向其发送请求)关闭连接而不通知客户端引起的。并且StandardHttpRequestRetryHandler能够重试。但是不会重试HTTP POST方法,因为它们不是幂等操作。但是是否有一种配置可以避免此连接首先重置?

我尝试使用evictExpiredConnections并没有帮助。设置connectionManager.setValidateAfterInactivity(20000)是否有助于在使用前验证连接?

在使用apache http客户端之前,我在SimpleClientHttpRequestFactory中使用了RestTemplate,但从未遇到连接重置问题。感谢您的帮助

0 个答案:

没有答案