简述RestTemplate
-
Spring框架中的RestTemplate是访问Rest服务的客户端
-
底层通过使用java.net包实现创建HTTP请求
-
通过使用ClientHttpRequestFactory指定不同的HTTP请求方式,主要提供了两种实现方式
-
SimpleClientHttpRequest(默认)
- 底层使用J2SE通过的方法(java.net包提供的方法),创建底层的HTTP请求
- 其实核心的createRequest方法,每次调用都会创建一个新的连接,造成极大的资源浪费,而且若连接未及时释放,会因为无法建立新的连接导致后面的请求阻塞
-
HttpComponentsClientHttpRequestFactory
- 底层使用HttpClient访问远程的HTTP访问(HttpClient支持HTTP连接池,HttpClient有性能优化)
-
RestTemplateConfig配置类 (采用HttpComponentsClientHttpRequestFactory)
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory httpRequestFactory){
return new RestTemplate(httpRequestFactory);
}
// 默认的
// @Bean
// public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
// SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
// factory.setReadTimeout(10000);
// factory.setConnectTimeout(10000);
// return factory;
// }
@Bean
public ClientHttpRequestFactory httpRequestFactory(){
return new HttpComponentsClientHttpRequestFactory(httpClient());
}
@Bean
public HttpClient httpClient(){
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", SSLConnectionSocketFactory.getSocketFactory())
.build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
//设置连接池最大是500个连接
connectionManager.setMaxTotal(500);
//每个主机请求一个域名的最大并发为300
//每个主机请求多个域名的并发和最大为500
connectionManager.setDefaultMaxPerRoute(300);
RequestConfig requestConfig = RequestConfig.custom()
//返回数据的超时时间
.setSocketTimeout(20000)
//连接上服务器的超时时间
.setConnectTimeout(10000)
//从连接池中获取连接的超时时间
.setConnectionRequestTimeout(1000)
.build();
return HttpClientBuilder.create().setDefaultRequestConfig(requestConfig)
.setConnectionManager(connectionManager)
.build();
}
}
标签:HTTP,配置,RestTemplate,factory,ClientHttpRequestFactory,高性能,return,public
From: https://www.cnblogs.com/xietingwei/p/17558473.html