我正在使用最新版本的 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 中看到了它?