Java 响应式编程

Posted 小马学编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 响应式编程相关的知识,希望对你有一定的参考价值。


最近学习一些有关响应式编程的国外讲座。响应式编程听起来很时尚,这里强调一点他不是响应式布局,而是响应式编程。响应式编程是一种新的编程模式。新的模式出现一定是为了解决新的问题。这一点顾名思义。什么场景适合响应式编程呢。我尝试给大家解释一下。大学的时候我们都有听收音机的习惯

。无论走在去食堂的路上还是在寝室里我们都会习惯性地打开收音机听广播。这时我们可能会干些别的事,如吃饭,看书呀。广播一直在播放,我们只会对自己感兴趣的节目才停下手中的事,认真听一下。说了这么多,似乎和今天主题没啥关系。当您阅读今天分享后,就会知道这就是响应式编程。


demo 是由于股市信息板


demo 准备工作

IDE:intelliJ

语言: Java

管理工具 maven

主要包: Rxjava ,com.yahoofinance-api


先简短介绍一下这个响应式编程的库,rx不仅对 java 语言的响应式编程有良好的支持,而且对其他语言也有不错支持,如 android 和 js,特备是 rxjs 是一个现代前端框架不可缺少库。可以算的上幕后英雄。

Java 响应式编程





Java 响应式编程

什么事 RxJava

一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。


响应式编程要说可能不是一期就能搞定,这里我通过一个简单实例来介绍一下吧,以便大家了解其中的一些基本概念。


以下四点就是响应式编程四个特点也是他主要解决的问题。

1. 事件驱动

2. 可扩展

3. resilient 不少人翻译为有弹性,这里弹性偏于可复原

4. 响应式


现在我们一般所做开发都是对数据增删改查(crud)的应用,但是真实的世界并非如此。其实世界是什么样子的呢,世界是无论你关心不关心他都在一直变化,你只会注意你所关心的。这个前面的收音机的故事很相似吧。响应式编程就是适合这种场景。到现在我相信您对响应式编程会有一定了解了吧。


如果用户想了解股票行情或楼市行情,我们查询客户所需信息,然后反馈给用户,由于数据量大所以耗时长,客户很可能等不及关闭应用或走开了。原因不能及时给出反馈。这就需要现在炒的很火的数据流,javascript 通过 promise 来一次性返回异步数据,但这并不是数据流。observable 其实是一个持续的数据流。这里 observable 和遍历是有区别的,区别的本质是遍历是同步的而 observable 是异步的。以下是遍历没有的内容

obervable 有三个不同通道组成

1. 数据通道,用于提供数据

2. 完成通道,当数据流结束时完成通道提供完成标识符,表示不再提供数据了。

3. 错误通道 这里的错误对象和其他数据没有什么区别,只不过他表示错误


创建一个 java 项目,然后创建三个文件,StockInfo 是股票信息类,用于表述股票。Sample 是我们应用的主入口类,StockServer 是我们模拟服务器行为的类。



    

Java 响应式编程


然后来写我们的模型类,私有变量为ticker(我们关心股票名)value 为股票当前的市值。

提供一个 fetch 方法,fetch 根据传入的股票名来获取其市值,这里我们用到 yahoo 提供的金融服务,很方便不用注册就是可以使用,只要引入一下  YahooFinance 这个包就可以使用提供服务。

Java 响应式编程


我们在示例中用到API 可以参考下图,我们也可以在官网找到更详细的 API。

Java 响应式编程


Java 响应式编程


这里类中我们来模拟一个服务端。我们先通过 getFeed 返回一个 Observable 对象,在观察者模式中称为“被观察者”,其实对象就是一个数据源,数据源中的数据被源源不断地发送到客户端。返回一个 Observer 对象。


Java 响应式编程

我们这里定义 symbos ,我们值关心 GOOG ,AMZN 和 ITC 这三只股票的市值,getFeed 返回一个 Observer(观察者模式中的“观察者”)他提供对数据订阅的方法 subscribe(订阅,观察者与被观察者,通过subscribe()方法进行订阅)用于获取 Observable 提供数据。

Java 响应式编程


大数据源发送数据时,我们可以通过订阅来获取数据。

Java 响应式编程


现在我们实现响应式编程中数据通道


现在我们实现完成通道,看下面代码我们将 while 循环限定为 5 次,最后发送的数据为 blah 。

Java 响应式编程

看一看打印结果

Java 响应式编程

其实在 RxJava 已经为我们准备好了这个方法,我们 onComplete 开实现完成通道,完成通道还会结束数据通道,所以其后面 blah 不会再发送到客户端。

Java 响应式编程


感谢大家支持!

以上是关于Java 响应式编程的主要内容,如果未能解决你的问题,请参考以下文章

技术交流什么是函数响应式编程(Java&Android版本)

Java响应式编程Springboot WebFlux基础与实战

浅析Java响应式编程(Reactive Programming)

理解响应式编程的本质

函数响应式编程(FRP)思想

响应式编程--JAVA成长之路