反应流中的单核与通量

根据文件:

通量是一种可以发射0. . N 个元素的流:

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

Mono 是一个由0.1个元素组成的流:

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

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

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

或者有一些特定的条件时,只需要使用 Mono 和通量不能处理的操作? 请建议。

43811 次浏览

来自 给你号文件

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

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

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

Flux 等效于 RxJava Observer 能够发射
- 零个或多个项目(多个元素的流)
然后是 随便完成 或者失败

Mono 最多只能发出一个元素(流一个元素)

关系:

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

简单地说,Mono 用于处理零或一个结果,而 Flux 用于处理零到多个结果,甚至可能是无限的结果。 这两个共同点都表现为纯异步和完全非阻塞。

我认为在我们知道只能得到一个结果的情况下使用 Mono 是一个很好的实践。通过这种方式,我们让从事相同工作的其他开发人员知道,结果可以是0或1。

我们在所有项目中都遵循这种方法。

这里有一个关于 Reactive Streams 的教程,以及 Mono 和 Flux-> 响应式编程的用法。