Spring的反应式编程简介( 二 )


图3-反应性事件流
响应式编程使用一种功能样式方法(类似于Streams API) , 这使对流执行不同类型的转换成为可能 。 流可以用作另一流的输入 。 流可以合并 , 映射和过滤 。
反应系统
反应式编程是开发“反应式系统”时的一种重要的实现技术 , 这是“反应式宣言”中描述的概念 , 强调了将现代应用程序设计为:

  • 响应式(及时响应)
  • 弹性(在故障情况下也保持响应)
  • 弹性(在不同的工作量下保持响应)
  • 消息驱动(依赖异步消息传递)
建立响应式系统意味着要处理诸如关注点分离 , 数据一致性 , 故障管理 , 消息传递实现的选择等问题 。
响应式编程可以用作一种实现技术 , 以确保各个服务使用异步的非阻塞模型 , 但是要将系统整体设计为响应式系统 , 则还需要进行设计 , 同时还要考虑所有其他方面 。
背景反应性X
2011年 , Microsoft发布了.NET的Reactive Extensions(ReactiveX或Rx)库 , 以提供一种简便的方法来创建异步的 , 事件驱动的程序 。 在几年的时间里 , Reactive Extensions被移植到多种语言和平台 , 包括Java , JavaScript , C ++ , Python和Swift 。 ReactiveX迅速成为一种跨语言标准 。 Java实现(RxJava)的开发由Netflix驱动 , 2014年发布了1.0版 。
ReactiveX使用了来自“四人帮”的迭代器模式和观察者模式的混合 。 区别在于 , 与Iterators基于正常拉动的行为相比 , 使用了推模型 。 除了观察变化之外 , 还将完成和错误等情况按要求通知给相应的人 。
反应流规范
随着时间的流逝 , 通过Reactive Streams的努力开发了Java的标准化 。 反应性流是旨在由为JVM构建的反应性库实现的较小规范 。 它指定要实现的类型以实现不同实现之间的互操作性 。 该规范定义了异步组件与背压之间的相互作用 。 Flow API在Java 9中采用了反应式流 。 Flow API的目的是充当一种互操作规范 , 而不是像RxJava这样的最终用户API 。
该规范涵盖以下接口:
发行人
这表示数据生产者/数据源 , 并具有一种使订阅者注册到发布者的方法 。
public interface Publisher {public void subscribe(Subscriber s);}消费者:
具有以下方法:
public interface Subscriber {public void onSubscribe(Subscription s);public void onNext(T t);public void onError(Throwable t);public void onComplete();}
  • onSubscribe Publisher 在处理开始之前由调用 ,用于将Subscription 对象从 传递 Publisher 到 。Subscriber
  • onNext 用于发出新物品的信号
  • onError 用于表示 Publisher 已发生故障并且将不再发射任何物品
  • onComplete 用于表示所有物品均已成功发射
订阅:
订阅包含使客户端能够控制发布者的项目散发(即提供背压支持)的方法 。
public interface Subscription {public void request(long n);public void cancel();}
  • request 允许 Subscriber 通知 Publisher 要发布多少个其他元素
  • cancel 允许订户取消商品的进一步发射 Publisher
处理器:
如果实体将转换传入的项目 , 然后将其进一步传递给另一个订户 , 则需要Processor接口的实现 。 这既充当订户又充当发布者 。
public interface Processor extends Subscriber, Publisher {}项目反应堆
从版本5开始 , Spring Framework就支持反应式编程 。 该支持建立在Project Reactor之上 。
【Spring的反应式编程简介】Project Reactor(或仅仅是Reactor)是用于在JVM上构建非阻塞应用程序的Reactive库 , 它基于Reactive Streams规范 。