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 super T> 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规范 。
- 智能手机市场|华为再拿第一!27%的份额领跑全行业,苹果8%排在第四名!
- 会员|美容院使用会员管理软件给顾客更好的消费体验!
- 行业|现在行业内客服托管费用是怎么算的
- 人民币|天猫国际新增“服务大类”,知舟集团提醒入驻这些类目的要注意
- 国外|坐拥77件专利,打破国外的垄断,造出中国最先进的家电芯片
- 技术|做“视频”绿厂是专业的,这项技术获人民日报评论点赞
- 面临|“熟悉的陌生人”不该被边缘化
- 中国|浅谈5G移动通信技术的前世和今生
- 页面|如何简单、快速制作流程图?上班族的画图技巧get
- 桌面|日常使用的软件及网站分享 篇一:几个动态壁纸软件和静态壁纸网站:助你美化你的桌面