Mono vs Flux in Reactive Stream

问题描述 投票:22回答:3

根据文件:

Flux是一个可以发出0..N元素的流:

Flux<String> fl = Flux.just("a", "b", "c");

Mono是一个0..1元素的流:

Mono<String> mn = Mono.just("hello");

因为两者都是反应流中Publisher接口的实现。

我们不能在大多数情况下只使用Flux,因为它也可以发出0..1,从而满足Mono的条件?

或者只有一些特定的条件,只需要使用Mono并且Flux无法处理操作?请建议。

spring-boot reactive-programming project-reactor reactive-streams
3个回答
25
投票

在许多情况下,您正在进行一些计算或调用服务,并且您只需要一个结果(或者可能是零或一个结果),而不是包含可能包含多个结果的集合。在这种情况下,有一个Mono更方便。

将它与“常规”Java进行比较:您不会将List用作任何可返回零或一个结果的方法的返回类型。您将使用Optional代替,这使得您立即明白您不会期望多个结果。


19
投票

Flux相当于RxJava Observable能够发射 - 零个或多个项目(许多元素的流) - 然后OPTIONALLY,完成或失败

单声道最多只发出一个项目(流一个元素)

关系:

  • 如果连接两个Monos,你将得到一个Flux
  • 您可以在Flux上调用single()来返回Mono

2
投票

来自文档here

这种区别在类型中带有一些语义信息,表明异步处理的粗略基数。例如,HTTP请求只产生一个响应,因此进行计数操作没有多大意义。因此,将此类HTTP调用的结果表示为Mono比将其表示为Flux更有意义,因为它仅提供与零项或一项的上下文相关的运算符。

© www.soinside.com 2019 - 2024. All rights reserved.