使用rest模板进行多个API调用

时间:2018-03-06 19:48:13

标签: rest spring-boot resttemplate

我在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();
}

0 个答案:

没有答案