小编mob*_*bbs的帖子

Spring webflux block、flatmap 和 subscribe 的区别

我有一个api需要调用其他3个api,第二个和第三个api调用依赖于第一个api的结果。

我对执行此操作的最佳方法以及使用块、订阅和平面地图之间的区别有点困惑。所有这 3 种方法都适合我,但我不确定哪一种是最好的。

这就是我目前所拥有的:

webClient1.getApi1(request.getId())
   .subscribe(api1Response -> {
      if (api1Response.hasData()) {
         Mono<ApiTwoResponse> monoTwo = webClient2
            .post()
            .syncBody(...)
            .bodyToMono(ApiTwoResponse.class)
         monoTwo.subscribe(two -> log.info(two));

         Mono<ApiThreeResponse> monoThree = webClient3
            .put()
            .syncBody(...)
            .bodyToMono(ApiThreeResponse.class)
         monoThree.subscribe(three -> log.info(three));
      } 
});
Run Code Online (Sandbox Code Playgroud)

我也尝试过阻止,尽管这似乎不鼓励:

Api1Response response = webClient1.getApi1(request.getId()).block()
Run Code Online (Sandbox Code Playgroud)

我也尝试过平面地图,尽管这迫使你返回一些东西:

webClient1.getApi1(request.getId())
   .flatmap(api1Response -> {
      ...
      return Mono.empty();
});
Run Code Online (Sandbox Code Playgroud)

感谢对上述代码的任何帮助和反馈。

spring-webflux

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

spring-webflux ×1