一、响应式编程规范
响应式流(Reactive Streams)规范,规定了异步组件之间使用背压进行交互。响应式流在Java 9中使用Flow API适配。Flow API是互操作的规范,而不是具体的实现,它的语义跟响应式流规范一致
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> { }
所有接口都存在于 org.reactivestreams 包中

底层机制

- Publisher 保证只有在 Subscriber 要求时才发送元素中新的部分
- Publisher 的整体实现既可以采用纯粹的阻塞等待,也可以采用仅在 Subscriber 请求下才生成数据的复杂机制
- 该规范为我们提供了混合推拉模型,此模型可以对背压进行合理控制
- 在某些情况下,可以优先考虑纯推模型。响应式流非常灵活,除动态推拉模型外,该规范还提供了独立的推模型和拉模型。根据文档,为了实现纯推模型,我们可以考虑请求 263−1
响应式流技术兼容套件
响应式流看着比较简单,实际上包含许多隐藏的陷阱。除 Java 接口之外,该规范还包含许多针对实现的文档化规则。这些规则严格限制每个接口,同时,保留规范中提到的所有行为至关重要。开发人员需要一个可以验证所有行为并确保响应式库标准化且相互兼容的通用工具。
Konrad Malawski 已经为此实现了一个工具包,其名称为响应式流技术兼容套件(ReactiveStreams Technology Compatibility Kit),简称为 TCK。
TCK 是一组TestNG 测试用例,需要对其进行扩展,并为相应的 Publisher 或 Subscriber 准备验证。
所有测试的命名都对应指定的规则。

浙公网安备 33010602011771号