gpt4 book ai didi

Spring 可配置、高性能、计量 http 客户端实例

转载 作者:行者123 更新时间:2023-12-01 18:57:06 29 4
gpt4 key购买 nike

来自 DropWizard 我已经习惯了它的 HttpClientConfiguration我感到困惑的是,在 Spring Boot 中,我找不到一些支持以类似的方式控制要使用的 http 客户端实例,例如 RestTemplates。

要在生产中工作,底层客户端实现应该具有高性能(例如非阻塞 io,具有连接重用和池化)。

然后我需要设置超时或身份验证,可能还包括指标收集、cookie 设置、SSL 证书设置。

以上所有内容都应该很容易在不同的变体中设置,以便在不同的上下文中使用不同的实例(例如,对于服务 X 使用这些设置和这个池,对于 Y 使用另一个池和设置),并且大多数参数应该是通过特定于环境的属性进行设置,以便在生产/质量保证/开发中具有不同的值。

有什么可以用于此目的吗?

最佳答案

下面是使用配置类配置 HttpClient 的示例。它通过此 RestTemplate 为所有请求配置基本身份验证,并对池进行一些调整。

HttpClientConfiguration.java

@Configuration
public class HttpClientConfiguration {

private static final Logger log = LoggerFactory.getLogger(HttpClientConfiguration.class);

@Autowired
private Environment environment;

@Bean
public ClientHttpRequestFactory httpRequestFactory() {
return new HttpComponentsClientHttpRequestFactory(httpClient());
}

@Bean
public RestTemplate restTemplate() {
RestTemplate restTemplate = new RestTemplate(httpRequestFactory());
restTemplate.setInterceptors(ImmutableList.of((request, body, execution) -> {
byte[] token = Base64.encodeBase64((format("%s:%s", environment.getProperty("fake.username"), environment.getProperty("fake.password"))).getBytes());
request.getHeaders().add("Authorization", format("Basic %s", new String(token)));

return execution.execute(request, body);
}));

return restTemplate;
}

@Bean
public HttpClient httpClient() {
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();

// Get the poolMaxTotal value from our application[-?].yml or default to 10 if not explicitly set
connectionManager.setMaxTotal(environment.getProperty("poolMaxTotal", Integer.class, 10));

return HttpClientBuilder
.create()
.setConnectionManager(connectionManager)
.build();
}

/**
* Just for demonstration
*/
@PostConstruct
public void debug() {
log.info("Pool max total: {}", environment.getProperty("poolMaxTotal", Integer.class));
}
}

和一个示例application.yml

fake.username: test
fake.password: test
poolMaxTotal: 10

您可以将配置值外部化到您的 application.yml 中,就像上面的 poolMaxTotal 等一样。

要支持每个环境的不同值,您可以使用 Spring 配置文件。使用上面的示例,您只需创建 application-prod.yml,其中 poolMaxTotal 具有“prod”特定值。然后使用 --spring.profiles.active=prod 启动您的应用,并且将使用“prod”值而不是 application.yml 中的默认值。无论您需要多少环境,您都可以执行此操作。

application-prod.yml

poolMaxTotal: 20

对于异步HttpClient,请参见此处:http://vincentdevillers.blogspot.fr/2013/10/a-best-spring-asyncresttemplate.html

关于Spring 可配置、高性能、计量 http 客户端实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29959772/

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