13

在我的微服务中,我必须从一些地方获取数据。有些 URL 是固定的,但有些不是。如果我的基本 URL 发生变化,我是否需要一次又一次地创建 Webclient。如果不是,那么以下创建 Web 客户端的方法是否正确。WebClient.create(); 然后每当我打电话时一次又一次地更改URI。根据我的理解,创建 WebClient 必须是一些繁重的操作。

ReactorClientHttpConnector connector = new ReactorClientHttpConnector(
                options -> options.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, requestTimeout).compression(true)
                        .afterNettyContextInit(ctx ->  ctx.addHandlerLast(new ReadTimeoutHandler(readTimeout, TimeUnit.MILLISECONDS))));
        return WebClient.builder()
                        .clientConnector(connector)
                        .baseUrl(hostURL)
                        .build();
4

1 回答 1

20

WebClient实例是可重用的。您需要不同客户端实例的唯一原因是满足特定需求:可观察性检测、特定身份验证客户端过滤器、特定连接/读/写超时。

不同的基本 URI 并不是创建不同实例的重要理由。创建一个实例而不设置基本 URI 完全没问题,这只是为了在一遍又一遍地调用同一主机时避免重复。

这很好:

WebClient webClient = WebClient.builder().build();

Mono<Resource> resource = webClient.get().uri("http://example.org/resource").retrieve()...;
Mono<Project> project = webClient.get().uri("http://spring.io/projects/spring-boot").retrieve()...;

请注意,如果您使用 Spring Boot,则应考虑使用提供的构建 Web 客户端实例WebClient.Builder(请参阅Spring Boot 参考文档)。

于 2018-12-19T13:38:52.153 回答