我在Spring Boot 1.5.4中开发了一个微服务。它暴露了许多宁静的GET和POST方法。特定的“GET”方法反过来使用Spring rest模板调用其他2个Micorservices构建响应。
这里的问题是在负载下,“GET”方法的响应时间不断增加,即使其他2个微服务响应更快。 我从日志中看到,在第一次调用之后,代码没有执行第二个Api调用,而是等待其他一些线程完成第一个Api调用,然后执行第二个Api调用。
这会导致响应时间大幅增加,并导致生产环境中的头痛。 有人可以解释一下上面的行为,以及可以做些什么来改善响应时间(通过按顺序调用Apis而不是等待)
这是我的rest模板bean配置。 我只是通过Autowire这个休息模板并调用其他2个微服务。
@Autowired
MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter;
@Value("${rest.template.readTimeout:10000}")
private int readTimeout;
@Value("${rest.template.connectionTimeout:10000}")
private int connectionTimeout;
@Bean
public ClientHttpRequestFactory getClientHttpRequestFactory() {
HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory();
factory.setReadTimeout(readTimeout);
factory.setConnectTimeout(connectionTimeout);
return new BufferingClientHttpRequestFactory(factory);
}
@Bean
public RestTemplate getRestTemplate(ClientHttpRequestFactory factory) {
RestTemplate restTemplate = new RestTemplate(factory);
List<ClientHttpRequestInterceptor> interceptors = new ArrayList<>();
interceptors.add(new ClientLoggingtInterceptor());
restTemplate.setInterceptors(interceptors);
List<HttpMessageConverter<?>> messageConverters = new ArrayList<HttpMessageConverter<?>>();
messageConverters.add(new FormHttpMessageConverter());
messageConverters.add(new StringHttpMessageConverter());
messageConverters.add(mappingJackson2HttpMessageConverter);
restTemplate.setMessageConverters(messageConverters);
restTemplate.setErrorHandler(getCustomErrorHandler());
return restTemplate;
}
@Bean
public CustomErrorHandler getCustomErrorHandler() {
return new CustomErrorHandler();
}