Mono 合并两个单声道并获得通量。然后从通量中提取一个单声道
我有两个Mono 合并两个单声道并获得通量。然后从通量中提取一个单声道,mono,spring-webflux,project-reactor,flux,reactor,Mono,Spring Webflux,Project Reactor,Flux,Reactor,我有两个Mono,我从两个不同的来源得到 我的意图是将这两个Mono合并成一个Flux1 然后使用Flux中的public final Mono reduce(双功能聚合器)方法从中创建一个最终的Mono(因为上述两个Mono的响应时间可能不同)2 方法: 有许多方法可以在Flux上使用,例如contact、zip、zipWith。如何找到正确的使用方法(两种Mono到Flux转换,即1) 这种方法真的正确吗?还是可以做些其他的事情来即兴发挥(2)?谢谢。如果您真的想使用通量来执行此操作,那么您
Mono
,我从两个不同的来源得到
我的意图是将这两个Mono
合并成一个Flux
1
然后使用Flux
中的public final Mono reduce(双功能聚合器)
方法从中创建一个最终的Mono
(因为上述两个Mono
的响应时间可能不同)2
方法:
有许多方法可以在Flux
上使用,例如contact
、zip
、zipWith
。如何找到正确的使用方法(两种Mono
到Flux
转换,即1)
这种方法真的正确吗?还是可以做些其他的事情来即兴发挥(2)?谢谢。如果您真的想使用
通量
来执行此操作,那么您可能需要使用合并()
,类似于:
Flux.merge(mono1(), mono2()).reduce((obj1, obj2) -> foo(obj1, obj2));
…其中foo()
实现了问题中reduce
方法的功能,将发出的两个对象组合成一个值。你不会想使用concat()
,除非你想一次订阅一个Mono
,等待每一个都完成,而不是全部一起订阅-而Flux.zipXXX
系列操作符将用于将不同的通量压缩在一起,所以你不会想要这样
然而,我认为对于这两个值,您没有正确的方法-如果您想将两个Mono
发布者放入Flux
,然后立即将其还原为Mono
,那么使用Flux
就没有多大意义了,因为在发出任何内容之前,您必须等待两个发布者都完成,然后您只发出一个值
相反,我建议使用,它允许您一次性完成所有需要的操作,例如:
Mono.zip(mono1(), mono2(), (obj1, obj2) -> foo(obj1, obj2));
谢谢你,迈克尔。我的要求是得到两个
Mono
,可能比6个还要多,比如说typeValidationRequest
。我的想法是将所有这些结合起来,形成一个Flux
,然后将Flux
减少到Mono
@nihar我已经用Flux
更新了答案,如果你想采用这种方法的话。谢谢@Michael