update resttemplate config
This commit is contained in:
parent
2890b40b4f
commit
03cb51fd4a
@ -43,7 +43,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient</artifactId>
|
||||||
<version>4.3.6</version>
|
<version>4.5.3</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
@ -6,16 +6,31 @@ import org.apache.http.config.Registry;
|
|||||||
import org.apache.http.config.RegistryBuilder;
|
import org.apache.http.config.RegistryBuilder;
|
||||||
import org.apache.http.conn.socket.ConnectionSocketFactory;
|
import org.apache.http.conn.socket.ConnectionSocketFactory;
|
||||||
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
|
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
|
||||||
|
import org.apache.http.conn.ssl.NoopHostnameVerifier;
|
||||||
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
||||||
|
import org.apache.http.conn.ssl.TrustStrategy;
|
||||||
|
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
|
||||||
import org.apache.http.impl.client.HttpClientBuilder;
|
import org.apache.http.impl.client.HttpClientBuilder;
|
||||||
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
||||||
|
import org.apache.http.ssl.SSLContextBuilder;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.boot.web.client.RestTemplateBuilder;
|
import org.springframework.boot.web.client.RestTemplateBuilder;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.http.client.ClientHttpRequestFactory;
|
import org.springframework.http.client.ClientHttpRequestFactory;
|
||||||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
||||||
|
import org.springframework.web.client.DefaultResponseErrorHandler;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
|
|
||||||
|
import javax.net.ssl.HostnameVerifier;
|
||||||
|
import javax.net.ssl.SSLContext;
|
||||||
|
import java.security.KeyManagementException;
|
||||||
|
import java.security.KeyStoreException;
|
||||||
|
import java.security.NoSuchAlgorithmException;
|
||||||
|
import java.security.cert.CertificateException;
|
||||||
|
import java.security.cert.X509Certificate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* RestTemplate客户端连接池配置
|
* RestTemplate客户端连接池配置
|
||||||
*
|
*
|
||||||
@ -26,34 +41,43 @@ import org.springframework.web.client.RestTemplate;
|
|||||||
@Configuration
|
@Configuration
|
||||||
public class RestClientConfig {
|
public class RestClientConfig {
|
||||||
@Bean
|
@Bean
|
||||||
public ClientHttpRequestFactory httpRequestFactory() {
|
public RestTemplate restTemplate() {
|
||||||
return new HttpComponentsClientHttpRequestFactory(httpClient());
|
RestTemplate restTemplate = new RestTemplate();
|
||||||
|
restTemplate.setRequestFactory(clientHttpRequestFactory());
|
||||||
|
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
|
||||||
|
return restTemplate;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public RestTemplate restTemplate(RestTemplateBuilder builder) {
|
public HttpComponentsClientHttpRequestFactory clientHttpRequestFactory() {
|
||||||
return new RestTemplate(httpRequestFactory());
|
try {
|
||||||
|
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
|
||||||
|
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
|
||||||
|
public boolean isTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
}).build();
|
||||||
@Bean
|
httpClientBuilder.setSSLContext(sslContext);
|
||||||
public HttpClient httpClient() {
|
HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
|
||||||
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
|
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
|
||||||
|
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
|
||||||
.register("http", PlainConnectionSocketFactory.getSocketFactory())
|
.register("http", PlainConnectionSocketFactory.getSocketFactory())
|
||||||
.register("https", SSLConnectionSocketFactory.getSocketFactory())
|
.register("https", sslConnectionSocketFactory).build();// 注册http和https请求
|
||||||
.build();
|
// 开始设置连接池
|
||||||
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
|
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
|
||||||
connectionManager.setMaxTotal(5);
|
poolingHttpClientConnectionManager.setMaxTotal(500); // 最大连接数500
|
||||||
connectionManager.setDefaultMaxPerRoute(5);
|
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(100); // 同路由并发数100
|
||||||
|
httpClientBuilder.setConnectionManager(poolingHttpClientConnectionManager);
|
||||||
RequestConfig requestConfig = RequestConfig.custom()
|
httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(3, true)); // 重试次数
|
||||||
.setSocketTimeout(8000)
|
HttpClient httpClient = httpClientBuilder.build();
|
||||||
.setConnectTimeout(8000)
|
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); // httpClient连接配置
|
||||||
.setConnectionRequestTimeout(8000)
|
clientHttpRequestFactory.setConnectTimeout(20000); // 连接超时
|
||||||
.build();
|
clientHttpRequestFactory.setReadTimeout(30000); // 数据读取超时时间
|
||||||
|
clientHttpRequestFactory.setConnectionRequestTimeout(20000); // 连接不够用的等待时间
|
||||||
return HttpClientBuilder.create()
|
return clientHttpRequestFactory;
|
||||||
.setDefaultRequestConfig(requestConfig)
|
} catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
|
||||||
.setConnectionManager(connectionManager)
|
log.error("初始化HTTP连接池出错", e);
|
||||||
.build();
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user