首页 > 解决方案 > Spring Webflux:进行一次 API 调用,然后进行多次并行调用

问题描述

我先说我是 WebFlux 和响应式编程的新手,我正在努力跟上最佳模式和实践的步伐。
但是我正在寻找一种方法来进行许多并行 api 调用,只有在我成功地进行另一个单独的 API 调用之后。

像这样的东西

    Mono<someReturnObject> saveStateOfMultipleObjectsinTheDB(SO request){
      Mono<String> 1stCallResult = saveFirstObject(request.getFirstObject());
      Mono.zip(saveSecondObject(request.getSecondObject().subscribeOn(Schedulers.elastic()), saveThirdObject(request.getThirdObject().subscribeOn(Schedulers.elastic())).map(this::maptoSomeReturnObject())
    }

现在这是一个轻微的简化。理想情况下,我想在这些 zip 方法中的每一个中编写一个 lambda 函数,但如果我必须编写一个函数,就像这里描述的那样。但是我的想法对这种模式正确吗?

标签: spring-webflux

解决方案


您走在正确的轨道上,您只需要使用then运算符在第一个并发调用之后链接两个并发调用。此外,subscribeOn如果您在后台使用响应式客户端(如WebClient),则无需在评论中讨论。

Mono<SomeReturnObject> saveStateOfMultipleObjectsinTheDB(SO request) {
    return saveFirstObject(request.getFirstObject())
        .then(Mono.zip(
            saveSecondObject(request.getSecondObject()),
            saveThirdObject(request.getThirdObject()))) 
        .map(this::maptoSomeReturnObject);
}

推荐阅读