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个还要多,比如说type
ValidationRequest
。我的想法是将所有这些结合起来,形成一个
Flux
,然后将
Flux
减少到
Mono
@nihar我已经用
Flux
更新了答案,如果你想采用这种方法的话。谢谢@Michael