Reactor Core 特性
Reactor 项目的主要产物是 reactor-core,这是一个聚焦于 Reactive Streams 规范、面向 Java 8 的响应式库。
Reactor 引入了可组合的响应式类型,这些类型实现了 Publisher,同时提供了丰富的操作符词汇:Flux 和 Mono。一个 Flux 对象表示由 0..N 个元素构成的响应式序列,而一个 Mono 对象表示一个单值或空(0..1)的结果。
这种区分向类型本身携带了一点语义信息,表明异步处理的大致基数。例如,一个 HTTP 请求只产生一个响应,因此做 count 操作没有多大意义。将这样一次 HTTP 调用的结果表达为 Mono<HttpResponse>,比表达为 Flux<HttpResponse> 更合理,因为它只提供与零个元素或一个元素的上下文相关的操作符。
会改变处理最大基数的操作符,也会切换到相应的类型。例如,count 操作符存在于 Flux 中,但它返回一个 Mono<Long>。
本节小结
📄️ Flux,由 0-N 个元素构成的异步序列
下图展示了 Flux 如何转换元素:
📄️ Mono,一个异步的 0-1 结果
下图展示了 Mono 如何转换一个元素:
📄️ 创建 Flux 或 Mono 并订阅它的简单方式
开始使用 Flux 和 Mono 最简单的方式,就是使用它们各自类中众多工厂方法之一。
📄️ 以编程方式创建序列
本节介绍通过以编程方式定义 Flux 或 Mono 相关的事件( onNext 、 onError 和 onComplete )来创建它们。所有这些方法的共同点是,它们都暴露一个 API 来触发事件,我们称之为 sink 。实际上有几种 sink 变体,我们稍后会介绍。
📄️ 线程与调度器
与 RxJava 一样, Reactor 可以被视为并发无关的。也就是说,它不强制采用某种并发模型,而是把主动权交给您 —— 开发者。然而,这并不妨碍该库在并发方面为您提供帮助。
📄️ 处理错误
在 Reactive Streams 中,错误是终止事件。一旦发生错误,它就会停止序列,并沿操作符链向下传播到最后一步 —— 您定义的 Subscriber 及其 onError 方法。
📄️ Sinks
在 Reactor 中, sink 是一个类,它允许以独立的方式安全地手动触发信号,创建一个类似 Publisher 的结构,能够处理多个 Subscriber ( unicast() 变体除外)。