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来实现一切?
org.reactivestreams.Publisher<T>
想想在非反应世界中会发生什么:我们可以决定让所有函数返回 List<T> ,即使我们知道它们只返回一个元素 . 例:
List<T>
public List<T> findAll() <-- looks ok public List<T> findFirst() <-- seems strange? public T findFirst() <-- better now?
那么为什么我们不总是返回 List<T> ?因为有时我们使用 List<T> 和其他只是 T 更方便,这样功能的用户更容易理解期望的内容 .
T
现在,如果我们将这些示例转换为反应世界,我们就会得到:
public List<T> findAll() --> public Flux<T> findAll() public T findFirst() --> public Mono<T> findFirst()
当然,我们总是可以使用 Flux<T> ,因为我们总是可以使用 List<T> ,但是当有多个项目或只有一个时,能够区分它更方便 .
Flux<T>
1 回答
想想在非反应世界中会发生什么:我们可以决定让所有函数返回
List<T>
,即使我们知道它们只返回一个元素 . 例:那么为什么我们不总是返回
List<T>
?因为有时我们使用List<T>
和其他只是T
更方便,这样功能的用户更容易理解期望的内容 .现在,如果我们将这些示例转换为反应世界,我们就会得到:
当然,我们总是可以使用
Flux<T>
,因为我们总是可以使用List<T>
,但是当有多个项目或只有一个时,能够区分它更方便 .