我已经开始了一个使用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)
提前谢谢。作为一名新手,任何建议都将受到赞赏。
对于您的特定条件,您需要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};
} );
每当你压缩两个mono时,第三个参数将是BiFunction
,但如果有三个参数,它将返回tuple
的flatmap
,然后在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,我的声明是正确的,所以我在这里被难住了,有人知道我做错了什么吗?感谢您的时间和考虑。