走过路过不要错过,有钱捧个钱场,没钱捧个人场. 欢迎欢迎.|

志旋

园龄:4年10个月粉丝:5关注:1

一、响应式编程规范

响应式流(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 包中

image-20211129154730803

底层机制

image-20211129155033726

  • Publisher 保证只有在 Subscriber 要求时才发送元素中新的部分
  • Publisher 的整体实现既可以采用纯粹的阻塞等待,也可以采用仅在 Subscriber 请求下才生成数据的复杂机制
  • 该规范为我们提供了混合推拉模型,此模型可以对背压进行合理控制
  • 在某些情况下,可以优先考虑纯推模型。响应式流非常灵活,除动态推拉模型外,该规范还提供了独立的推模型和拉模型。根据文档,为了实现纯推模型,我们可以考虑请求 263−1

响应式流技术兼容套件

响应式流看着比较简单,实际上包含许多隐藏的陷阱。除 Java 接口之外,该规范还包含许多针对实现的文档化规则。这些规则严格限制每个接口,同时,保留规范中提到的所有行为至关重要。开发人员需要一个可以验证所有行为并确保响应式库标准化且相互兼容的通用工具。

Konrad Malawski 已经为此实现了一个工具包,其名称为响应式流技术兼容套件(ReactiveStreams Technology Compatibility Kit),简称为 TCK

TCK 是一组TestNG 测试用例,需要对其进行扩展,并为相应的 Publisher 或 Subscriber 准备验证。

所有测试的命名都对应指定的规则。

本文作者:志旋

本文链接:https://www.cnblogs.com/wuzhixuan/p/15620473.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   志旋  阅读(100)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起