Mono vs Flux in Reactive Stream

Kay*_*ayV 30 reactive-programming project-reactor reactive-streams

根据文件:

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

Flux<String> fl = Flux.just("a", "b", "c");
Run Code Online (Sandbox Code Playgroud)

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

Mono<String> mn = Mono.just("hello");
Run Code Online (Sandbox Code Playgroud)

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

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

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

Jes*_*per 30

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

将它与"常规"Java进行比较:您不会将其List用作任何可返回零或一个结果的方法的返回类型.您可以使用Optional,这样可以立即清楚地表明您不会期望多个结果.


Mag*_*GGG 22

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

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

关系:

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


pvp*_*ran 5

这里的文档

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