如何在 Spring webflux 中处理嵌套订阅

How to handle nested subscriptions in Spring webflux

我有一个要求,我需要执行一系列 3 个方法调用,每个方法调用 returns 一个 Mono。

   Mono<WeightResponse> weightService() 
   Mono<PriceResponse> priceService(WeightResponse wr) 
   Mono<DispatchResponse> dispatchService(PriceResponse pr)

这3个方法调用需要按时间顺序进行。

这就是我试图想出的。我还没有端到端地竞争和测试这个功能。我正在寻找有关如何在 Spring Reactor 中处理此类情况的建议? 订阅中有订阅。这是处理这种情况的正确方法吗? 这种嵌套订阅会不会有任何副作用?

weightService().subscribe(wr -> {
      priceService(wr).subscribe (pr -> {
        dispatchService(pr).subscribe (dr -> {
            System.out.println("Dispatch Done!");
          },
          e -> log.error("error in dispatch {}", e);
        );
       },
       e -> log.error("error in pricing {}", e);
      );
     },
     e -> log.error("error in weight calculation {}", e);
   );
      

您不应明确订阅。通常你需要构建反应流,像 spring-webflux 这样的框架会订阅它。

在下面的示例中,flatMap 将在内部订阅,您可以链接响应以在下一个运算符中使用它。

Mono<DispatchResponse> execute() {
    return weightService()
            .flatMap(wr -> priceService(wr))
            .flatMap(pr -> dispatchService(pr));
}