92 lines
4.2 KiB
Java
92 lines
4.2 KiB
Java
package com.xkrs.common.config;
|
||
|
||
/**
|
||
* @author xkrs
|
||
*/
|
||
import org.apache.http.client.HttpClient;
|
||
import org.apache.http.config.Registry;
|
||
import org.apache.http.config.RegistryBuilder;
|
||
import org.apache.http.conn.socket.ConnectionSocketFactory;
|
||
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.impl.client.DefaultHttpRequestRetryHandler;
|
||
import org.apache.http.impl.client.HttpClientBuilder;
|
||
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
||
import org.apache.http.ssl.SSLContextBuilder;
|
||
import org.apache.http.ssl.TrustStrategy;
|
||
import org.springframework.context.annotation.Bean;
|
||
import org.springframework.context.annotation.Configuration;
|
||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
||
import org.springframework.web.client.DefaultResponseErrorHandler;
|
||
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;
|
||
|
||
/**
|
||
* @Author: HongZhi Wang
|
||
* @Date: 2020/8/17 16:45
|
||
*
|
||
* 创建RestTemplate配置类,设置连接池大小、超时时间、重试机制等。
|
||
*/
|
||
@Configuration
|
||
public class RestTemplateConfig {
|
||
|
||
@Bean
|
||
public RestTemplate restTemplate(){
|
||
RestTemplate restTemplate = new RestTemplate();
|
||
restTemplate.setRequestFactory(clientHttpRequestFactory());
|
||
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
|
||
return restTemplate;
|
||
}
|
||
|
||
@Bean
|
||
public HttpComponentsClientHttpRequestFactory clientHttpRequestFactory() {
|
||
try {
|
||
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
|
||
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
|
||
@Override
|
||
public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
|
||
return true;
|
||
}
|
||
}).build();
|
||
httpClientBuilder.setSSLContext(sslContext);
|
||
HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
|
||
SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
|
||
Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory>create()
|
||
.register("http", PlainConnectionSocketFactory.getSocketFactory())
|
||
//注册http和https请求
|
||
.register("https", sslConnectionSocketFactory).build();
|
||
//开始设置连接池
|
||
//创建连接池
|
||
PoolingHttpClientConnectionManager poolingHttpClientConnectionManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry);
|
||
// 最大连接数500
|
||
poolingHttpClientConnectionManager.setMaxTotal(500);
|
||
// 同路由并发数100
|
||
poolingHttpClientConnectionManager.setDefaultMaxPerRoute(100);
|
||
httpClientBuilder.setConnectionManager(poolingHttpClientConnectionManager);
|
||
// 重试次数
|
||
httpClientBuilder.setRetryHandler(new DefaultHttpRequestRetryHandler(3, true));
|
||
HttpClient httpClient = httpClientBuilder.build();
|
||
// httpClient连接配置
|
||
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient);
|
||
// 连接超时
|
||
clientHttpRequestFactory.setConnectTimeout(20000);
|
||
// 数据读取超时时间
|
||
clientHttpRequestFactory.setReadTimeout(30000);
|
||
// 连接不够用的等待时间
|
||
clientHttpRequestFactory.setConnectionRequestTimeout(20000);
|
||
return clientHttpRequestFactory;
|
||
} catch (KeyManagementException | NoSuchAlgorithmException | KeyStoreException e) {
|
||
System.out.println("初始化HTTP连接池出错"+ e);
|
||
}
|
||
return null;
|
||
}
|
||
}
|