apache-httpclient-4.x - Apacha HttpClient 配置
问题描述
我目前RestTemplate
在我的网络服务器中使用由 Apache http 客户端 4.5.6 支持来发出 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 时,有时我会看到:
处理对 {s}-> 的请求时捕获的 I/O 异常 (java.net.SocketException):连接重置
我在另一篇文章中读到这是由服务器(我正在向其发送请求)关闭连接而不通知客户端引起的。并且StandardHttpRequestRetryHandler
能够重试。但是 HTTP POST 方法不会重试,因为它们不是幂等操作。但是有没有一种配置可以首先避免这种连接重置?
我试过使用evictExpiredConnections
但没有帮助。设置connectionManager.setValidateAfterInactivity(20000)
是否有助于在使用前验证连接?
在使用我使用SimpleClientHttpRequestFactory
的apache http 客户端之前RestTemplate
,我从未遇到过连接重置问题。任何帮助表示赞赏
解决方案
推荐阅读
- find - ksh:如何获取按最近活动排序的所有“日志”目录?
- r - 将全局环境中的 R 对象组合成一个列表
- c - 如何使用 C 代码编辑 Excel 工作表?
- python-3.x - Selenium Python 用 bs4 抓取在分页中间冻结
- javascript - FusionCharts 升级后无法唤醒
- javascript - 异步上传多个文件时浏览器/服务器挂起?
- sed - sed:如何删除文件中以注释行为界的行范围?
- r - 如何结合 lapply、t.test、leveneTest、if 和 else
- python - 完整的numpy数组到矩阵
- javascript - 使用 Java 脚本的数组求和