响应式流规范

https://github.com/reactive-streams/reactive-streams-jvm/blob/v1.0.3/README.md#specification
image.png
image.png
响应式流(Reactive Streams)规范,规定了异步组件之间使用背压进行交互。
响应式流在Java 9中使用Flow API适配。Flow API是互操作的规范,而不是具体的实现,它的语义跟 响应式流规范一致。
响应式流规范包括如下接口:
image.png

  • Publisher 保证只有在 Subscriber 要求时才发送元素中新的部分。
  • Publisher 的整体实现既可以采用纯粹的阻塞等待,也可以采用仅在 Subscriber 请求下才生成数据 的复杂机制。
  • 该规范为我们提供了混合推拉模型,此模型可以对背压进行合理控制。

    Publisher 发布者

    表示数据流的生产者或数据源,包含一个方法让订阅者注册到发布者,Publisher 代表了发布者和 订阅者直接连接的标准化入口点。
    1. public interface Publisher<T> {
    2. public void subscribe(Subscriber<? super T> s);
    3. }

    Subscriber 订阅者

    表示消费者,onSubscribe 方法为我们提供了一种标准化的方式来通知 Subscriber 订阅成功。
    1. public interface Subscriber<T> {
    2. public void onSubscribe(Subscription s);
    3. public void onNext(T t);
    4. public void onError(Throwable t);
    5. public void onComplete();
    6. }
  • onSubscribe 发布者在开始处理之前调用,并向订阅者传递一个订阅票据对象 (Subscription)。
  • onNext 用于通知订阅者发布者发布了新的数据项。
  • onError 用于通知订阅者,发布者遇到了异常,不再发布数据事件。
  • onComplete 用于通知订阅者所有的数据事件都已发布完。

Subscription 订阅票据

onSubscribe 方法的传入参数引入一个名为 Subscription(订阅)的订阅票据。
Subscription 为控制元素的生产提供了基础。
有如下方法:

  1. public interface Subscription {
  2. public void request(long n);
  3. public void cancel();
  4. }
  • request 用于让订阅者通知发布者随后需要发布的元素数量。
  • cancel 用于让订阅者取消发布者随后的事件流。

Processor 中间角色

如果实体需要转换进来的项目,并将转换后的项目传递给另一个订阅者,此时需要Processor接口。
该接口既是订阅者,又是发布者:

  1. public interface Processor<T, R> extends Subscriber<T>, Publisher<R> {}