当前位置: 首页 > 知识库问答 >
问题:

Zip三种不同类型的单声道

景宏盛
2023-03-14

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

我的控制器方法将响应返回为Mono

Mono<CustomObject> customMono = serivce1.method();
Mono<Boolean> booleanMono = service2.method();
Mono<String> stringMono = service3.method();

因此,为了准备响应(Mono

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

问题是,没有这样的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.mergewith或Mono.concawith方法,因为我的Mono对象是不同的类型。
  • 我可以平面映射/映射每个Mono并创建一个链。但是我希望service2在一个单独的线程中被并行调用,因为它不依赖于service1调用。但是service3调用依赖于service1响应。

总之,我需要做的是:

  • 首先拨打服务1电话
  • 在不同的线程上分别调用service2
  • 拨打依赖于服务1呼叫数据的服务3呼叫
  • 生成最终响应对象(Mono)

提前谢谢。作为一名新手,任何建议都将受到赞赏。


共有2个答案

左丘成业
2023-03-14

对于您的特定条件,您需要Mono.zip当()这将确保您的第三次服务调用将从服务调用1的响应中获得所需的数据

Mono.zip(monoResponse1,monoResponse2).zipWhen(data ->serviceCall3(data.getT1())).flatMap(response ->{
    response.getT1().getT1();//response from mono1
    response.getT1().getT2();//response from mono 2
    response.getT2();//response from mono 3
    return {create your mono response here};
} );
韩照
2023-03-14

每当你压缩两个mono时,第三个参数将是BiFunction,但如果有三个参数,它将返回tupleflatmap,然后在tuple中你将得到其他mono的响应。您需要按以下方式修改代码

Mono.zip(customMono, booleanMono, stringMono).flatMap(data->{
 data.getT1();
 data.getT2();
 data.getT3();
 return <your_response_object>;
});

现在,什么是getT1()getT2()getT3()的返回类型?

通常情况下,这取决于你的回报。

希望它能帮助你。

 类似资料:
  • 本文向大家介绍Jquery时间轴特效(三种不同类型),包括了Jquery时间轴特效(三种不同类型)的使用技巧和注意事项,需要的朋友参考一下 jquery三种不同类型时间轴切换展示幻灯特效,先给大家展示效果图,喜欢的朋友可以下载源码哦。 查看效果       源码下载 文件引用:

  • 我在Java中有两个几乎相同的方法。唯一的区别是它们有不同的参数类型。它们使用泛型并返回输入参数的类型T。我怎样才能摆脱重复的代码?下面是我的两个方法。最后,它们都使用不同的类型调用Spring。否则,方法是相同的。

  • 问题内容: 我正在多线程环境中通过不同的并发模型(http://tutorials.jenkov.com/java-concurrency/concurrency- models.html ) 本文重点介绍了 三种并发 模型。 平行工人 第一个并发模型是我所说的并行工作器模型。进来的工作分配给不同的 工人 。 流水线 工人的组织就像 工厂 中装配线的工人一样。每个工人仅完成全部工作的一部分。完成该

  • 问题内容: 我正在用Java处理数组,但有一个问题。我知道Java中的数组是类似数据类型的集合,如下所示: 上面的声明可以作为一个数组读取,该数组是整数类型的集合。 考虑一下: 在这里,我可以说上面的是一个数组,它是不同数据类型的集合,还是它是相似数据类型(即对象)的数组? 我对此感到困惑和怀疑。在Java中,是否可以创建可以容纳不同数据类型的数组或任何种类的集合? 问题答案: Java中的所有对

  • 我有3个CompletableFutures,所有3个都返回不同的数据类型。 我希望创建一个结果对象,它是所有3个期货返回的结果的组合。 因此,我当前的工作代码如下所示: 我的问题是: > 这是处理返回不同结果类型的多个期货的正确方法吗? 在Acceptance Sync中构造ClassD对象是否正确?

  • 我正在尝试编译我正在编写的Java Web应用程序,并且我遇到了编译错误,我不知道该怎么办。从我完成的谷歌搜索中,我发现了这个SO问题,但是提问者使用的是EJB,而我的错误是在JPA实体类中。 下面是maven构建错误。 这是我的用户类文件。 我查看了javax.persistence.Index JavaDoc,我的声明是正确的,所以我在这里被难住了,有人知道我做错了什么吗?感谢您的时间和考虑。