我创建了一个 Web 客户端定制器,它使用自定义
HTTPClient
创建了
ConnectionProvider
@Bean
WebClientCustomizer webClientCustomizer(CustomizableWebClientProperties properties) {
return builder -> {
var connectionProvider = ConnectionProvider
.builder("customizable-webclient-connection-provider")
.maxConnections(properties.maxConnections())
.maxIdleTime(properties.maxIdleTimeout())
.build();
var httpClient = HttpClient.create(connectionProvider).compress(true);
httpClient.warmup().block();
if (properties.wiretap()) {
httpClient = httpClient.wiretap("uk.co.something.webclient", LogLevel.DEBUG, TEXTUAL, UTF_8);
}
var connector = new ReactorClientHttpConnector(httpClient);
builder.clientConnector(connector);
};
}
我有几个问题:
ConnectionProvider
实例与在该定制器中创建的 HttpClient
共享吗?HTTPClient
是最好还是可以共享?应用程序中有多个服务可以构建自己的 Web 客户端实例。除此之外,任何其他推荐都非常受欢迎!
如果场景允许,最好共享LoopResource、ConnectionProvider、SslContext等公共资源。 默认情况下,如果没有显式配置,Reactor Netty 将共享这些。
这同样适用于 HttpClient 和 WebClient。如果场景允许,共享 HttpClient 和 WebClient 总是更好。