根据文件:
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无法处理操作?请建议。
在许多情况下,您正在进行一些计算或调用服务,并且您只需要一个结果(或者可能是零或一个结果),而不是包含可能包含多个结果的集合。在这种情况下,有一个Mono
更方便。
将它与“常规”Java进行比较:您不会将List
用作任何可返回零或一个结果的方法的返回类型。您将使用Optional
代替,这使得您立即明白您不会期望多个结果。
Flux相当于RxJava Observable能够发射 - 零个或多个项目(许多元素的流) - 然后OPTIONALLY,完成或失败
单声道最多只发出一个项目(流一个元素)
关系:
来自文档here
这种区别在类型中带有一些语义信息,表明异步处理的粗略基数。例如,HTTP请求只产生一个响应,因此进行计数操作没有多大意义。因此,将此类HTTP调用的结果表示为Mono比将其表示为Flux更有意义,因为它仅提供与零项或一项的上下文相关的运算符。