spring - 如何使用 Spring 5 WebClient 等待所有请求完成?

标签 spring spring-webflux project-reactor

我有一个简单的 Java 程序,它使用 Spring WebClient 发送多个请求。每个返回一个单声道,我使用 response.subscribe() 来检查结果。

但是,我的主执行线程在处理所有请求之前完成,除非我添加一个 long Thread.sleep()。

使用 CompletableFutures,您可以使用: CompletableFuture.allOf(futures).join();

有没有办法等待所有 Mono 完成?

最佳答案

正如 the Project Reactor documentation 中所解释的那样,直到您将 subscribe 转换为 Publisher 之前,什么都不会发生。该操作返回 Disposable 的实例,这意味着该操作可能仍在进行中。

如果您不在非阻塞 react 管道(例如,HTTP 请求/响应交换或批处理操作)的中间,并且您需要在退出 VM 之前等待该管道完成 - 那么您可以 block() .这实际上是少数“允许”的用例之一。

你的问题并没有真正解释你所说的“检查回复”是什么意思。在这里,我们将只获取 POJO(如果 HTTP 响应状态不是 200 或者如果我们无法反序列化响应,则会发送错误信号)。
在您的示例中,您可能有以下内容:

Mono<User> one = this.webClient...
Mono<Account> two = this.webClient...
Mono<Book> three = this.webClient...

// we want all requests to happen concurrently
Mono<Void> all = Mono.when(one, two, three);
// we subscribe and then wait for all to be done
all.block();

关于spring - 如何使用 Spring 5 WebClient 等待所有请求完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50740795/

相关文章:

java - 在谷歌应用程序引擎中初始化objectify

java - 将上下文从一个 Mono 传递到另一个 Mono - 上下文为空

java - Webflux WebClient java.lang.NullPointerException

java - publishOn 和并行的区别

java - Spring Rest Controller 字符串响应

java - 无法打开 ServletContext 资源

Spring WebFlux - bodyType=org.springframework.web.multipart.MultipartFile 不支持内容类型 'application/xml'

spring-boot - 如何使用 Spring Webflux 返回 GZIP 响应?

java - Spring 事务管理是否与 Spring WebFlux 一起使用?

java - 将 Spring MongoDB AggregationResults ArrayList 映射到 List<POJO>