相应中常用中间件比如:
1. 数据库
2. redis
3. kafka
4. RestTemplate
RestTemplate 是 spring-web 模块的
有三个构造函数
构造函数主要初始化两点:
1. 添加 HttpMessageConverter ,这个是用来进行序列化的
2. 设置 ClientHttpRequestFactory http请求工厂,决定使用哪种http客户端完成请求
默认是 SimpleClientHttpRequestFactory
发起请求:
首先 使用 工厂类创建 完成http请求的客户端实例
然后 使用客户端实例执行请求
处理响应
1. 创建客户端实例,一般默认就是使用 URL 打开一个连接
2. 执行连接,并获取响应数据
3. 对响应数据进行处理
根据响应码,匹配响应枚举
判断响应码是不是 4 或者 5开头的
如果响应码是 4 或者 5 开头,这抛出相应的异常
如果响应 不是 4 或者 5,则对响应流进行解析
一般来说,直接 new RestTemplate 实例就可以用了。
如果需要定制化,就是 定制化 反序列化 和 创建http请求的客户端工厂类。
spring boot 自动配置模块提供了一个 builder
这里 提供了 对 RestTemplate 统一的配置
比如,可以实现 RestTemplateCustomizer接口,定制化 RestTemplate
这里使用HttpClient作为Http请求执行客户端
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.13</version>
</dependency>
@Component
public class MyRestTemplateCustomizer implements RestTemplateCustomizer {
@Override
public void customize(RestTemplate restTemplate) {
RequestConfig requestConfig = RequestConfig.custom()
.setConnectTimeout(50000)
.setSocketTimeout(50000)
.setConnectionRequestTimeout(50000).build();
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", SSLConnectionSocketFactory.getSocketFactory())
.build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
connectionManager.setMaxTotal(10);
connectionManager.setDefaultMaxPerRoute(10);
connectionManager.setValidateAfterInactivity(1000);
CloseableHttpClient httpClient = HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(connectionManager)
.build();
ClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
restTemplate.setRequestFactory(clientHttpRequestFactory);
}
}
这是RestTemplate 实例化的过程。