HTTPClient 推荐

问题描述 投票:0回答:1

我创建了一个 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 客户端实例。

除此之外,任何其他推荐都非常受欢迎!

spring-webflux project-reactor spring-webclient reactor-netty
1个回答
0
投票

如果场景允许,最好共享LoopResource、ConnectionProvider、SslContext等公共资源。 默认情况下,如果没有显式配置,Reactor Netty 将共享这些。

这同样适用于 HttpClient 和 WebClient。如果场景允许,共享 HttpClient 和 WebClient 总是更好。

© www.soinside.com 2019 - 2024. All rights reserved.