Spring Boot、WebClient、异步调用和等待

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

我需要建议/建议。我还没有编写程序。我计划编写一个 Spring Boot RESTful Web 服务。在网络服务中,我计划做几个异步的 使用 Spring Wenflux 的 WebClient 调用其他外部 RESTful Web 服务。我需要等待所有这些异步调用响应,直到它们全部完成,然后再转到下一个程序任务。问题是我该如何等待?我计划记录 WebClient 的处理程序对象引用,并进行无限循环检查是否已处理所有同步响应。有更好的方法吗?

java spring-boot asynchronous spring-webflux spring-webclient
1个回答
0
投票

使用 webflux 和反应式方法永远不会等待或执行阻塞操作,直到您知道自己在做什么。使用 Flux/Mono api 定义转换链。在您的情况下,您可以执行 Webclient 的所有请求,获取它们的 Mono,然后定义一个在源 Mono 完成时完成的 Mono:

Mono<ResponseObject> apiMethodHandler() {
  Mono<SomeServiceResponse> response1Mono = webclient.get()...;
  Mono<AnotherServiceResponse> response2Mono = webclient.get()...;
  return Mono.when(response1Mono, response2Mono).map(v -> new ResponseObject("all good"));
} 

根据具体情况,还可以使用一些其他选项。例如,如果您需要所有结果来计算响应,则可以使用

.collectList
:

Mono<ResponseObject> apiMethodHandler() {
  Mono<SomeServiceResponse> response1Mono = webclient.get()...;
  Mono<AnotherServiceResponse> response2Mono = webclient.get()...;
  return Flux.merge(response1Mono, response2Mono)
    .collectList(responsesList -> Mono.just(new ResponseObject(responsesList)));
} 
© www.soinside.com 2019 - 2024. All rights reserved.