Java的响应式流

Java API 版本的 响应式流 只包含四个接口,即 Publisher<T>Subscriber<T>SubscriptionProcessor<T,R>

Publisher - 发布者

Info

发布者(Publisher)是潜在的包含无限数量的有序元素的生产者,它根据收到的请求向当前订阅者发送元素。

public interface Publisher<T> {
    public void subscribe(Subscriber<? super T> s);
}

Subscriber - 订阅者

Info

订阅者(Subscriber)从发布者那里订阅并接收元素。发布者向订阅者发送订阅令牌(Subscription Token)。通过订阅令牌,订阅者就可以向发布者请求多个元素。当元素准备就绪时,发布者就会向订阅者发送合适数量的元素。然后订阅者可以请求更多的元素,发布者也可能有多个来自订阅者的待处理请求

public interface Subscriber<T> {
    public void onSubscribe(Subscription s);
    public void onNext(T t);
    public void onError(Throwable t);
    public void onComplete();
}

当执行发布者的 subscribe() 方法时,发布者会回调订阅者的 onSubscribe() 方法。在这个方法中,通常订阅者会借助传入的 Subscription 对象向发布者请求 n 个数据。然后发布者通过不断调用订阅者的 onNext() 方法向订阅者发出最多 n 个数据。如果数据全部发完,则会调用 onComplete() 方法告知订阅者流已经发完;如果有错误发生,则通过 onError() 方法发出错误提示消息,这时同样也会终止 数据流

Subscription - 订阅

Info

订阅(Subscription)表示订阅者订阅的一个令牌。当订阅请求成功时,发布者将其传递给订阅者。订阅者使用订阅令牌与发布者进行交互,例如请求更多的元素或取消订阅

public interface Subscription {
    public void request(long n);
    public void cancel();
}

当发布者调用 subscribe() 方法注册订阅者时,会通过订阅者的回调方法 onSubscribe() 传入 Subscription 对象,之后订阅者就可以使用这个 Subscription 对象的 request() 方法向发布者请求数据。

Processor - 处理器

Info

处理器(Processor)充当订阅者和发布者之间的转换器(Transformer)。

核心接口交互流程

image.png