Springboot-RestTemplate combat service call record

springboot comes within resttemplate can help us achieve other long-distance call service interface role, actually encapsulates httpclient, the tedious httpclient

Springboot configured with a unique configuration class to configure, manage and handed sprinng.

Httpclient avoid frequent create objects in a project, resulting in a waste heap memory to ensure singleton connection objects.

Advantages: simple configuration, flexible request parameters.

Cons: try-catch error requires manual capture, do not look at the log is not easy to find the problem is not the fuse, you can specify the error code is returned according to fuse state, to detect.

Configuration class RestTemplateConfig:

@Configuration
public class RestTemplateConfig {

@Bean
public RestTemplate httpRestTemplate() {
ClientHttpRequestFactory factory = httpRequestFactory();
RestTemplate restTemplate = new RestTemplate(factory);
// 可以添加消息转换
//restTemplate.setMessageConverters(...);
// 可以增加拦截器
//restTemplate.setInterceptors(...);
return restTemplate;
}

public ClientHttpRequestFactory httpRequestFactory() {
return new HttpComponentsClientHttpRequestFactory(restTemplateConfigHttpClient());
}

public HttpClient restTemplateConfigHttpClient() {
. Registry <ConnectionSocketFactory> = RegistryBuilder Registry <ConnectionSocketFactory> Create ()
.register ( "HTTP", PlainConnectionSocketFactory.getSocketFactory ())
.register ( "HTTPS", SSLConnectionSocketFactory.getSocketFactory ())
.build ();
PoolingHttpClientConnectionManager ConnectionManager = new new PoolingHttpClientConnectionManager (Registry);
// set the maximum overall pool connect connection depending on how the scene
connectionManager.setMaxTotal (200 is);
// maxTotal route is subdivided in
connectionManager.setDefaultMaxPerRoute (100);
RequestConfig requestConfig RequestConfig.custom = ()
/ / time data returned by the server (response), and this time is exceeded thrown read timeout
.setSocketTimeout (10000)
// connection time on the server (success handshake) beyond which time throws timeout Connect
.setConnectTimeout (5000)
// get the timeout connection from the connection pool, not exceeding the time available to get connected,
// throws org.apache.http.conn.ConnectionPoolTimeoutException:
// Waiting for Connection Timeout from the pool
.setConnectionRequestTimeout (5000)
.build ();
return HttpClientBuilder.create ()
.setDefaultRequestConfig (requestConfig)
.setConnectionManager (the ConnectionManager)
. Build ();
}
}
injection:
@Autowired 
RestTemplateConfig restTemplateConfig;

reQuest:

 

RestTemplate httpRestTemplate = restTemplateConfig.httpRestTemplate();
try {
List<Integer> requestBean = new ArrayList<>();
result.stream().map(a -> {
requestBean.add(a.getId());
return a;
}).collect(Collectors.toList());
Map map = httpRestTemplate.postForObject(服务url, requestBean, Map.class);
result = result.stream().map(a -> {
Iterator iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String key = (String) iterator.next();
Object obj = map.get(key);
if (String.valueOf(a.getId()).equals(key)) {
Integer i = (Integer) obj;
a.setCourseCount (I);
return A;
}
}
return A;
.}) the collect (Collectors.toList ());
} the catch (Exception E) {
System.err.println ( "service call:" + metel2ApiUrl + "Query abnormal number of courses ");
e.printStackTrace ();
}
return the Result;

 

Guess you like

Origin www.cnblogs.com/mlzdev/p/11800140.html