响应式流规范
https://github.com/reactive-streams/reactive-streams-jvm/blob/v1.0.3/README.md#specification

响应式流(Reactive Streams)规范,规定了异步组件之间使用背压进行交互。
响应式流在Java 9中使用Flow API适配。Flow API是互操作的规范,而不是具体的实现,它的语义跟 响应式流规范一致。
响应式流规范包括如下接口: 
- Publisher 保证只有在 Subscriber 要求时才发送元素中新的部分。
- Publisher 的整体实现既可以采用纯粹的阻塞等待,也可以采用仅在 Subscriber 请求下才生成数据 的复杂机制。
- 该规范为我们提供了混合推拉模型,此模型可以对背压进行合理控制。
Publisher 发布者
表示数据流的生产者或数据源,包含一个方法让订阅者注册到发布者,Publisher 代表了发布者和 订阅者直接连接的标准化入口点。public interface Publisher<T> {public void subscribe(Subscriber<? super T> s);}
Subscriber 订阅者
表示消费者,onSubscribe 方法为我们提供了一种标准化的方式来通知 Subscriber 订阅成功。public interface Subscriber<T> {public void onSubscribe(Subscription s);public void onNext(T t);public void onError(Throwable t);public void onComplete();}
- onSubscribe 发布者在开始处理之前调用,并向订阅者传递一个订阅票据对象 (Subscription)。
- onNext 用于通知订阅者发布者发布了新的数据项。
- onError 用于通知订阅者,发布者遇到了异常,不再发布数据事件。
- onComplete 用于通知订阅者所有的数据事件都已发布完。
Subscription 订阅票据
onSubscribe 方法的传入参数引入一个名为 Subscription(订阅)的订阅票据。
Subscription 为控制元素的生产提供了基础。
有如下方法:
public interface Subscription {public void request(long n);public void cancel();}
- request 用于让订阅者通知发布者随后需要发布的元素数量。
- cancel 用于让订阅者取消发布者随后的事件流。
Processor 中间角色
如果实体需要转换进来的项目,并将转换后的项目传递给另一个订阅者,此时需要Processor接口。
该接口既是订阅者,又是发布者:
public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {}
