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