Java的响应式流
Java API 版本的 响应式流 只包含四个接口,即 Publisher<T>
、Subscriber<T>
、Subscription
和 Processor<T,R>
。
Publisher - 发布者
发布者(Publisher)是潜在的包含无限数量的有序元素的生产者,它根据收到的请求向当前订阅者发送元素。
public interface Publisher<T> {
public void subscribe(Subscriber<? super T> s);
}
Subscriber - 订阅者
订阅者(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 - 订阅
订阅(Subscription)表示订阅者订阅的一个令牌。当订阅请求成功时,发布者将其传递给订阅者。订阅者使用订阅令牌与发布者进行交互,例如请求更多的元素或取消订阅
public interface Subscription {
public void request(long n);
public void cancel();
}
当发布者调用 subscribe() 方法注册订阅者时,会通过订阅者的回调方法 onSubscribe() 传入 Subscription 对象,之后订阅者就可以使用这个 Subscription 对象的 request() 方法向发布者请求数据。
Processor - 处理器
处理器(Processor)充当订阅者和发布者之间的转换器(Transformer)。