RestTemplate是Spring提供的用于发送HTTP请求的客户端工具,RestTmplate提供了很多便捷的方法,可以大大提供开发效率。RestTemplate默认依赖JDK的Http连接工具HttpUrlConnection,你也可以替换不同的源,比如OkHttp、Apache HttpComponents 等等。本文以HttpClient为例来实现RestTemplate工具类,重点关注以下几点:
1、连接池超线程数量
为避免每次请求都需要创建线程,造成不必要的系统开销,在Http请求时,可使用线程池提高线程的使用率
2、连接池线程超时设置
线程超时主要为了保证在数据请求过程中当依赖服务出现问题时能够快速中断请求,防止因线程阻塞造成雪崩效应。线程超时主要有发起连接超时及接收数据返回超时(对应着TCP连接的三次握手事件超时和数据传输时间超时)。
3、重试设置
在分布式环境下,网络不稳定的情况总是会存在的,因此为了减少因网络不稳定导致的请求失败,有必要在发起HTTP请求时进行有限次数的请求重试。此处强调的是有限次数的重试,主要是防止网络确实出现了问题时,不断重试导致系统资源耗尽等问题。
4、通用转发设置
我们在进行HTTP转发请求时,往往会有一些通用请求设置,此时可以在工具类中进行统一设置,提高代码的可维护性。
5、返回值
在Rest风格的HTTP请求模式下,可以基于String类型来接收接口返回值(String模式比较通用,即使是对象也可以通过转换成字符类型进行数据接收)。而在一些特殊场景我们可能也需要传递一些文件流,这种情况下,直接使用String类型来接收返回值则不能满足需求。因此,如果我们从通用性考虑的话,可以基于字节流的方式来接收返回数据。例如可以使用org.springframework.core.io.Resource.class类型来接收返回数据。
下面是具体的代码参考:
- Mavan依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
- 工具类配置代码
import org.apache.http.Header;
import org.apache.http.NoHttpResponseException;
import org