我有一个简单的Java程序,可以用Spring WebClient发送多个请求。每个函数都返回一个单声道,我使用response.subscribe()来检查结果。
但是,我的主线程在处理所有请求之前就结束了,除非我添加了一个很长的Thread.sleep()。
对于期货,您可以使用:CompletableFuture.allOf( CompletableFutures ).join();
有没有办法等待所有的Mono都完成?
发布于 2018-06-07 21:53:06
正如在the Project Reactor documentation中所解释的,在subscribe到Publisher之前什么都不会发生。该操作将返回Disposable的一个实例,这意味着该操作可能仍在进行中。
如果您不在非阻塞反应式管道中(例如,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();https://stackoverflow.com/questions/50740795
复制相似问题