HttpClient设置请求超时

本文深入探讨了HTTPClient在不同版本中设置超时的方法,包括3.X、4.3前及4.3后的版本。详细解释了连接超时、数据传输超时等概念,并分析了设置超时的重要性,避免服务性能损耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近,我无疑间看到同事提交到git上的httpclient调用第三方服务设置超时代码,发现有趣的一件事。项目中引用的httpclient版本是4.4.5版本,结果同事为了设置超时,在项目的pom.xml中又增加了一个低版本的httpclient依赖。然后按照低版本的超时写法设置httpclient调用超时。这里并不是说低版本的超时稳定性更好,可能同事不知道4.4.5版本升级之后的设置超时写法。这里和大家学习httpclient超时设置。

为什么要设置超时

我们经常在服务中集成httpclient或者okHttp去调用第三方服务。httpclient默认是没有设置超时时间的,这时候如果第三方的服务因为某些因素导致响应变慢,或者直接挂掉了。当我们服务调用第三方接口,在建立连接,或者等待第三方服务的响应的时候,由于长时间没有得到响应,服务痴情等待,日渐消瘦导致服务自身性能损耗,响应变慢。如果我们在调用第三方服务的时候设置一个固定的时间,在这个时间内没有等到响应,我们就是结束请求,天涯何处无芳草,何必单恋一枝花。这里的超时机制类似一个熔断,避免造成雪崩效应。

如何设置

前面说到,同时为了给httpclient设置超时,强行将httpclient版本降低了。这显然是对httpclient的几个大版本设置超时时间不熟悉导致的。

  • 3.X的超时设置
HttpClient client = new HttpClient();  
client.setConnectionTimeout(30000);   
client.setTimeout(30000);  
HttpClient httpClient= new HttpClient();   
httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);  
  • 4.3之前超时设置
HttpClient httpClient=new DefaultHttpClient();  
httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,2000);//连接时间  
httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,2000);//数据传输时间  
  •  4.3之后超时设置
CloseableHttpClient httpClient = HttpClients.createDefault();  
tpGet httpGet=new HttpGet("http://www.aiqihai.com");  
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000)
.setConnectionRequestTimeout(1000).setSocketTimeout(5000).build();  
httpGet.setConfig(requestConfig);  
httpClient.execute(httpGet);

对于上面的三个时间,我们需要知道具体代表什么。setConnectTimeout:设置连接超时时间,单位毫秒。setConnectionRequestTimeout:设置从connect Manager获取Connection 超时时间,单位毫秒。这个属性是新加的属性,因为目前版本是可以共享连接池的。setSocketTimeout:请求获取数据的超时时间(单位毫秒)。 如果访问一个接口,多少时间内无法返回数据,就直接放弃此次调用。

总结

上面简单介绍了httpclient设置超时的一些小细节,对于httpclient调用其他知识后续在和大家一起学习!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱琴孩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值