小编biv*_*kil的帖子

Zip 三种不同类型的单声道

我已经使用 Spring Webflux 开始了一个新项目,我对这种反应式编码范式还很陌生。所以对于像新手一样的提问提前道歉。

我的控制器方法返回响应Mono<ResponseEntity<String>>,我有三个不同的服务可以调用,从那里我得到三个不同的Mono对象 -

Mono<CustomObject> customMono = serivce1.method();
Mono<Boolean> booleanMono = service2.method();
Mono<String> stringMono = service3.method();
Run Code Online (Sandbox Code Playgroud)

所以为了准备响应(Mono<ResponseEntity<String>>),我需要做这样的事情 -

Mono.zip(customMono, booleanMono, stringMono, (customData, booleanData, stringData) -> {
------
return Mono.just(ResponseEntity.ok().body("-----"));
});
Run Code Online (Sandbox Code Playgroud)

问题是,没有这样的zip方法将 3Mono和一个函数作为参数。我已经找到了这个 - 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-

但它不能满足我的要求。所以我面临的问题

  • 我不能使用Mono.mergeWithMono.concaWith方法,因为我的 Mono 对象是不同类型的。
  • 我可以 flatMap/map 每个 Mono 并创建一个链。但我希望在单独的线程中并行调用 service2,因为它不依赖于 service1 调用。但是 service3 调用依赖于 service1 响应。

总之,我需要做的是:

  • 首先拨打 service1 电话
  • 在不同的线程上分别调用 service2
  • 进行依赖于 service1 呼叫数据的 service3 呼叫
  • Mono<ResponseEntity<String>>使用来自所有服务调用的数据生成最终响应对象 …

java reactor-netty spring-webflux

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

标签 统计

java ×1

reactor-netty ×1

spring-webflux ×1