gpt4 book ai didi

java - Spring RestTemplate 配置策略从单个 API 调用多个 rest 服务

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:33:20 25 4
gpt4 key购买 nike

我有一个场景,其中有一个聚合端点可以调用多个 RESTful 下游系统,并返回所有这些系统的综合响应。

我目前正在使用配置为单例 bean 的 rest 模板,并将其注入(inject)相应的服务以进行 rest 调用。 RestTemplate 使用默认的 CloseableHttpClient 作为 HttpClient,一旦请求成功,它将关闭连接。

这会是一个好方法吗?或者如果每个调用其 RESTful 服务的服务配置剩余模板会更好吗?

最佳答案

RestTemplate 是线程安全的。您可以使用池连接管理器:

  @Bean
public PoolingHttpClientConnectionManager poolingHttpClientConnectionManager() {
PoolingHttpClientConnectionManager result = new PoolingHttpClientConnectionManager();
result.setMaxTotal(20); // FIXME Consider making this value configurable
return result;
}

@Bean
public RequestConfig requestConfig() {
RequestConfig result = RequestConfig.custom()
// FIXME Consider making these values configurable
.setConnectionRequestTimeout(2000)
.setConnectTimeout(2000)
.setSocketTimeout(2000)
.build();
return result;
}

@Bean
public CloseableHttpClient httpClient(PoolingHttpClientConnectionManager poolingHttpClientConnectionManager, RequestConfig requestConfig) {
CloseableHttpClient result = HttpClientBuilder
.create()
.setConnectionManager(poolingHttpClientConnectionManager)
.setDefaultRequestConfig(requestConfig)
.build();
return result;
}

@Bean
public RestTemplate restTemplate(HttpClient httpClient) {
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
return new RestTemplate(requestFactory);
}

同样重要的是,您可能需要根据观察/负载测试更改 RestTemplate 的默认设置,RestTemplate 不必使用整个池来防止主机劫持它。

您可以在我的博客上阅读更多内容 Troubleshooting Spring's RestTemplate Requests Timeout

关于java - Spring RestTemplate 配置策略从单个 API 调用多个 rest 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49142876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com