package cn.com.bsfit.aop.config; import com.alibaba.fastjson.parser.Feature; import com.alibaba.fastjson.support.config.FastJsonConfig; import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter; import org.apache.http.client.config.RequestConfig; 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.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; import org.apache.http.ssl.SSLContextBuilder; import org.apache.http.ssl.TrustStrategy; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.http.MediaType; import org.springframework.http.client.HttpComponentsClientHttpRequestFactory; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.web.client.RestTemplate; 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; import java.util.ArrayList; import java.util.List; @Configuration public class RestTemplateConfig { @Value("${frms.aop.rest.threadsize:10}") private int poolSize; @Value("${frms.aop.rest.socketTimeout:3000}") private int socketTimeout; @Value("${frms.aop.rest.connectTimeout:3000}") private int connectTimeout; @Value("${frms.aop.rest.connectionRequestTimeout:3000}") private int connectionRequestTimeout; @Value("${http.workflow.notify.threadsize:4}") private int wfPoolSize; @Value("${http.workflow.notify.connect.timeout:30000}") private int wfTimeout; @Bean @Primary RestTemplate restTemplate(){ PoolingHttpClientConnectionManager connMgr = new PoolingHttpClientConnectionManager(); connMgr.setMaxTotal(poolSize+1); connMgr.setDefaultMaxPerRoute(poolSize); CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(connMgr).build(); HttpComponentsClientHttpRequestFactory httpComponentsClientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); httpComponentsClientHttpRequestFactory.setReadTimeout(socketTimeout); httpComponentsClientHttpRequestFactory.setConnectTimeout(connectTimeout); httpComponentsClientHttpRequestFactory.setConnectionRequestTimeout(connectionRequestTimeout); RestTemplate template = new RestTemplate(httpComponentsClientHttpRequestFactory); List<HttpMessageConverter<?>> converters = new ArrayList<>(); FastJsonHttpMessageConverter fastjson = new FastJsonHttpMessageConverter(); FastJsonConfig fjConfig = new FastJsonConfig(); fjConfig.setFeatures(Feature.DisableSpecialKeyDetect); fastjson.setFastJsonConfig(fjConfig); List<MediaType> supportedMediaTypes = new ArrayList<>(); supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8); supportedMediaTypes.add(MediaType.parseMediaType("application/javascript")); fastjson.setSupportedMediaTypes(supportedMediaTypes); converters.add(fastjson); template.setMessageConverters(converters); return template; } public CloseableHttpClient wfHttpClient () throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException { SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() { @Override public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { return true; } }).build(); Registry<ConnectionSocketFactory> socketFactoryRegistry = RegistryBuilder.<ConnectionSocketFactory> create() .register("http", PlainConnectionSocketFactory.getSocketFactory()) .register("https",new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE)).build(); PoolingHttpClientConnectionManager connMgr = new PoolingHttpClientConnectionManager(socketFactoryRegistry); connMgr.setMaxTotal(wfPoolSize+10); connMgr.setDefaultMaxPerRoute(wfPoolSize); return HttpClients.custom().setConnectionManager(connMgr).build(); } @Bean public RequestConfig requestConfig(){ return RequestConfig.custom().setSocketTimeout(wfTimeout).setConnectTimeout(wfTimeout).build(); } }
RestTemplate
最新推荐文章于 2024-06-27 15:10:55 发布