2

我正在使用最新版本的 Spring - Spring 5。

我正在开发http客户端的WebService“聚合器”,类似于将请求路由到外部WebServices,接收响应接收响应,进行一些数据操作并回复给我的HTTP服务的客户端。

为了在我的应用程序中创建 http 客户端,我基本上使用可用于构建反应式应用程序的新 WebClient。

我的代码遵循以下风格:

private WebClient client = WebClient
            .builder()
            .clientConnector(new ReactorClientHttpConnector())
            .baseUrl("http://webservice")
            .build();

// Later calling like:



client.method(HttpMethod.POST) // Or GET, whatever
      .uri(builder -> builder
             .path("search")                                  
             .build())
      .headers(defaultHeaders())
      .exchange()
      .block()

稍后,我会在自己的 HTTP API 中公开此调用的结果,为简单起见,我不会在此处发布。

作为这个应用程序的一部分,我使用 Netty 作为嵌入式 HTTP 层为我的应用程序的客户端提供服务。(当我在 Spring Boot Starter 中选择Spring Webflux时,它也是默认的)。

我的用例不一定是响应式应用程序,我不需要执行任何流式处理或背压逻辑。

但是,我的理解是,使用 Netty,我可以以非阻塞方式对外部 HTTP 服务进行所有请求,这对我的用例很有用。

问题是:

1. 关于 NIO 功能是否正确,我可能从中受益?

2. 如果正在使用 Spring 5 的这个 WebClient 接口,我会失去一些东西,或者在我的用例中获得一些东西,因为我没有做反应性的东西吗?

3. 应该org.springframework.web.reactive.function.client.WebClient满足我的要求吗?

4. WebClient 是构建功能管道的好选择吗?我问是因为我打算获取一次调用的结果,然后进行后续调用,并且我打算使用CompletableFutures,我在 WebClient API 中看到了它?

4

0 回答 0