首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Spring5 WebClient等待所有请求完成?

问如何使用Spring5 WebClient等待所有请求完成?
EN

Stack Overflow用户
提问于 2018-06-07 20:06:33
回答 1查看 12.1K关注 0票数 13

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

但是,我的主线程在处理所有请求之前就结束了,除非我添加了一个很长的Thread.sleep()。

对于期货,您可以使用:CompletableFuture.allOf( CompletableFutures ).join();

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 21:53:06

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

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

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

代码语言:javascript
复制
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();
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50740795

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档