如何在 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));
}
我有一个要求,我需要执行一系列 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));
}