【问题标题】:Why is the Mono type needed in Reactor 3?为什么 Reactor 3 需要 Mono 类型?
【发布时间】:2018-06-18 17:14:52
【问题描述】:

Reactor 3 有 2 种主要数据类型,它们都是反应式流发布者

  • reactor.core.publisher.Mono<T>
  • reactor.core.publisher.Flux<T>

我理解 Mono 是 0 或 1 个元素的流与 Flux 是 0 或 N 个元素的流之间的区别。

既然 Mono 和 Flush 都在实现 org.reactivestreams.Publisher<T>,为什么我们需要这两种类型,为什么不把 Flux 用于一切?

【问题讨论】:

标签: spring reactive-programming project-reactor spring-webflux reactive-streams


【解决方案1】:

想想在非响应式世界中发生了什么:我们可以决定让所有函数都返回List<T>,即使我们知道它们只会返回一个元素。示例:

public List<T> findAll()     <-- looks ok

public List<T> findFirst()   <-- seems strange?

public T findFirst()         <-- better now?

那么为什么我们不总是返回List&lt;T&gt;?因为有时我们使用List&lt;T&gt; 和其他人只使用T 更方便,这样函数的用户更容易理解预期的内容。

现在,如果我们将这些示例转换为响应式世界,我们会得到:

public List<T> findAll()   -->   public Flux<T> findAll()

public T findFirst()       -->   public Mono<T> findFirst()

当然,我们总是可以使用Flux&lt;T&gt;,就像我们总是可以使用List&lt;T&gt;一样,但是当有多个项目或只有一个项目时能够区分会更方便。

【讨论】:

    猜你喜欢
    • 2020-03-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2015-12-23
    相关资源
    最近更新 更多