\ 要点\\\\ 在高并发编程范式的发展过程中,我们使用过很多工具,比如java.util.concurrent包、Akka Streams框架、CompletableFuture类以及Netty框架。响应式编程近来大受欢迎,这要得益于它强大的功能和健壮的工具包。
- 响应式编程是一种处理异步数据流的规范\\t
- 响应式为数据流的转换和聚合以及数据流的控制管理提供了工具支持\\t
- 弹珠交互图(Marble Diagram)以可交互的方式可视化响应式的结构\\t
- 响应式编程风格看起来跟Java Streams API有点相似,不过本质上是不一样的\\t
- 如何连接到动态流处理异步数据源\
\\ 响应式编程是一种处理异步数据流的规范,它为数据流的转换和聚合以及数据流的控制管理提供了工具支持,它让考量程序整体设计的工作变得简单。
\\ 但它使用起来并不简单,它的学习曲线也并不平坦。对于我们当中的那些数学家来说,学习响应式就好比当初他们从学习标准代数的无向量过渡到学习线性代数的向量、矩阵和张量,它们实际上是被单元化的数据流。传统的编程模式以对象为基础,而响应式以事件流为基础。事件可能以多种形式出现,比如对象、数据源、鼠标移动信息或者异常。在传统的编程范式里,“异常”这个词描述的是对意外情况的处理,因为在这个背景下,没有按照预想发生的情况都算异常。而在响应式编程范式里,异常却是一等公民。因为数据流一般是异步的,所以抛出异常是没有意义的,任何一个异常都会被当成数据流里的一个事件。
\\ 在这篇文章里,我们会探讨响应式编程的基本原理,以一种教与学的方式来强化一些重要的概念。
\\ 首先要记住的是,响应式里所有的东西都是流。Observable封装了流,是最基本的单元。流可以包含零个或多个事件,有未完成和已完成两种状态,可以正常结束也可以发生错误。如果一个流正常完成或者发生错误,说明处理结束了,虽然有些工具可以对错误进行重试或者使用不同的流替换发生错误的流。
\\ 在运行我们给出的例子之前,需要把RxJava的依赖加入到项目里。可以在Maven里加入这个依赖:
\\
\\u0026lt; dependency\u0026gt; \\u0026lt; groupId\u0026gt; io.reactivex.rxjava\u0026lt; /groupId\u0026gt; \\u0026lt; artifactId\u0026gt; rxjava\u0026lt; /artifactId\u0026gt; \\u0026lt; version\u0026gt; 1.1.10\u0026lt; /version\u0026gt; \\u0026lt; /dependency\u0026gt;
\\ Observable类有几个静态工厂方法和实例方法,它们被用来生成各种新的Observable对象,或者把Observable对象添加到感兴趣的处理流程里。Observable是可变的,所以针对它们的操作总是会生成新的Observable对象。为了更好地理解我们的例子,我们先来温习一下Observable的基本操作,因为在后面的例子里会用到它们。
\\ Observable.just方法生成一个简单对象,然后返回。例如:
\\
\Observable.just(\"Howdy!\")
\\ 这行代码生成一个新的Observable对象,在结束之前触发一个单独的事件,生成字符串“Howdy!”。
\\ 可以把新生成的Observable对象赋给一个Observable变量:
\\
\Observable\u0026lt; String\u0026gt; hello = Observable.just(\"Howdy!\");
\\ 不过知道这个还远远不够。就像那个著名的哲学问题一样,森林里的一颗树倒下来,如果周围没有人听见,那么就等于说树的倒下是无声无息的。一个Observable对象必须要有一个订阅者来处理它所生成的事件。所幸的是,现在Java支持Lambda表达式,我们就可以使用简洁的声明式风格来表示订阅操作:
\\
\Observable\u0026lt; String\u0026gt; howdy = Observable.just(\"Howdy!\"); \howdy.subscribe(System.out::println);
\\ 这段代码仍然会生成字符串“Howdy!”。
\\ 【RXJava实例解析】跟Observable的其它方法一样,just方法可以被重载:
\\
\Observable.just(\"Hello\