package com.cloud.common.config;
|
|
import com.sun.media.jfxmedia.logging.Logger;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.http.NoHttpResponseException;
|
import org.apache.http.client.HttpClient;
|
import org.apache.http.conn.ConnectionPoolTimeoutException;
|
import org.apache.http.impl.client.CloseableHttpClient;
|
import org.apache.http.impl.client.DefaultHttpRequestRetryHandler;
|
import org.apache.http.impl.client.HttpClientBuilder;
|
import org.apache.http.impl.client.HttpClients;
|
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
|
import org.springframework.http.converter.HttpMessageConverter;
|
import org.springframework.http.converter.ResourceHttpMessageConverter;
|
import org.springframework.http.converter.StringHttpMessageConverter;
|
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
|
import org.springframework.http.converter.xml.SourceHttpMessageConverter;
|
import org.springframework.web.client.DefaultResponseErrorHandler;
|
import org.springframework.web.client.RestTemplate;
|
|
import java.nio.charset.Charset;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
/**
|
* @author lp
|
*/
|
@Configuration
|
@Slf4j
|
public class RestTemplateConfig {
|
|
@Bean
|
public RestTemplate restTemplate() {
|
PoolingHttpClientConnectionManager pollingConnectionManager = new PoolingHttpClientConnectionManager();
|
pollingConnectionManager.setMaxTotal(200);
|
pollingConnectionManager.setDefaultMaxPerRoute(200);
|
|
HttpClientBuilder httpClientBuilder = HttpClients.custom();
|
httpClientBuilder.setConnectionManager(pollingConnectionManager);
|
httpClientBuilder.setRetryHandler((exception,executionCount,context)->{
|
if(executionCount >3){
|
log.warn("http请求已3次");
|
return false;
|
}
|
if(exception instanceof NoHttpResponseException || exception instanceof ConnectionPoolTimeoutException){
|
log.warn("NoHttpResponseExecption");
|
return true;
|
}
|
return false;
|
});
|
HttpClient httpClient = httpClientBuilder.build();
|
|
HttpComponentsClientHttpRequestFactory clientHttpRequestFactory = new HttpComponentsClientHttpRequestFactory(
|
httpClient);
|
// 超时时间
|
clientHttpRequestFactory.setConnectTimeout(20000);
|
clientHttpRequestFactory.setReadTimeout(30000);
|
clientHttpRequestFactory.setConnectionRequestTimeout(20000);
|
|
RestTemplate restTemplate = new RestTemplate();
|
restTemplate.setRequestFactory(clientHttpRequestFactory);
|
|
restTemplate.setErrorHandler(new DefaultResponseErrorHandler());
|
|
return restTemplate;
|
}
|
}
|