拉链三种不同的单声道,不同类型的
2022-09-02 23:32:02
我已经使用Spring Webflux开始了一个新项目,我对这种反应式编码范式相当陌生。因此,对于像新手一样的质疑,请提前道歉。
我的控制器方法返回响应,因为我有三个不同的服务可以调用,从中获取三个不同的对象,如下所示 -Mono<ResponseEntity<String>>
Mono
Mono<CustomObject> customMono = serivce1.method();
Mono<Boolean> booleanMono = service2.method();
Mono<String> stringMono = service3.method();
所以为了准备响应(),我需要做这样的事情 -Mono<ResponseEntity<String>>
Mono.zip(customMono, booleanMono, stringMono, (customData, booleanData, stringData) -> {
------
return Mono.just(ResponseEntity.ok().body("-----"));
});
问题是,没有这样的方法可以采用3和函数作为参数。我已经找到了这个 - https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html#zip-reactor.core.publisher.Mono-reactor.core.publisher.Mono-java.util.function.BiFunction -zip
Mono
但它不符合我的要求。所以我面临的问题
- 我不能使用Mono.mergeWith或Mono.concaWith方法,因为我的Mono对象是不同类型的。
- 我可以平面映射/映射每个Mono并创建一个链。但是我希望在单独的线程中并行调用service2,因为它不依赖于service1调用。但 service3 调用依赖于 service1 响应。
总之,我需要做的是:
- 首先拨打 service1 电话
- 在不同的线程上分别调用 service2
- 进行依赖于 service1 调用数据的 service3 调用
- 使用来自所有服务调用的数据生成最终响应对象 ()。
Mono<ResponseEntity<String>>
提前致谢。作为新手,任何建议都是值得赞赏的。