课程目标
开发人员已经习惯于传统编程范式的思维习惯,无论是面向过程设计还是面向对象设计,其本质仍然是顺序式编程,指令会按照编写代码的顺序依次执行。若非特别情况,这种按顺序执行的方式一定是阻塞式的,前一条指令没有执行完毕,则后续指令会等待。这与我们的思维模式是相对应的。
然而,随着大规模软件系统的质量属性要求以及CPU的多核化,并行(或并发)开发与异步编程模型成为了开发人员必不可少需要掌握的编程技能,而函数式编程思想也重新焕发了活力,由于纯函数的无副作用以及对不变性的限制,使得函数式编程可以更好地与并发编程结合起来。
为了满足程序响应性、容错性等质量属性要求,响应式编程应运而生,它的特点包括:
消息驱动
异步处理
非阻塞编程
学习和了解响应式编程,其目的不仅仅是要学会使用响应式编程框架进行项目开发,更重要的是打破传统编程固有思维,开拓新的编程与设计视角,从设计本质的角度去理解响应式编程,只有如此,才能在正确的场景选择合适的响应式框架,以实际满足项目需求为目的进行响应式编程。这正是本次培训的目的。
课程大纲
响应式编程的本质思想
一言以蔽之,响应式编程就是异步数据流编程,此时,需要改变思维惯式,将程序传递的内容视为“流(stream)”,然后通过消息驱动进行非阻塞的异步处理。如果结合函数式编程思想,即所谓的“函数式响应式编程(FRP)”,则可以更好地结合函数的转换特性,以不变方式轻松地实现对流的各种转换与操作。
本部分内容包括:
响应式编程范式详解
理解响应式宣言
案例剖析:
以响应式编程思想实现:Word Counter
响应式编程后端框架
RxJava
ReactiveX是最早的响应式编程框架,它参考了设计模式中的迭代器模式与观察者模式,并结合了函数式编程思想,以事件处理的形式实现了响应式编程的异步非阻塞处理。ReactiveX框架提供了多种语言的支持,包括Java、JS、Scala、Python以及Swift与Kotlin等语言,支持响应式编程的后端与前端开发。
本部分内容主要介绍RxJava的后端开发(实际上,RxJava也被大量应用于Android开发),内容包括:
RxJava设计原理
Observable对象
RxJava的常用操作符
RxJava 2.0的Reactive Streams
AKKA Stream
AKKA是基于Actor模型的并发与分布式编程框架,而AKKA Stream则是针对AKKA框架提供的响应式框架,具有异步、非阻塞的流处理功能。AKKA Stream适用于从一个活动数据流提取或聚合我们想要的数据。由于数据的获取是以流的形式进行,就避免了对整个数据的获取而造成的阻塞,使得整个过程响应快速。而AKKA Stream底层基于AKKA分布式编程框架,使得我们可以非常方便地进行分布式编程,支持每个流处理的Actor水平扩展。
本部分内容包括:
AKKA框架基础
Actor编程模型
AKKA编程
AKKA Stream编程
案例:分布式数据采集
通过移动、联通、电信三大运营商提供的物联网接口(演练时以模拟接口进行)对用户的SIM卡指标数据进行采集。采集的SIM卡数量最多可能达到10W。
Spring Web Reactive
Spring Framework 5提供了Web的响应式编程框架,包括Spring WebFlux、WebClient、WebSockets以及测试框架与Spring Reactor。在前端框架的响应式编程中,Spring Web Reactive还属于新兴框架,在生产项目中较少使用。但考虑到在Java生态圈中Spring的重要地位,有必要将该框架列入重要的技术选型名单中。
内容包括:
Spring WebFlux
WebClient
WebSockets
Web框架的测试
响应式编程前端框架
RxJS
与RxJava相似,但RxJS主要针对前端的响应式编程,通过该框架可以非常方便地创建流,并对流对象进行合并、过滤、转换等操作,并通过该框架侦听事件以及处理事件,实现前端界面的快速响应与非阻塞请求。本部分内容包括:
RxJS的安装
RxJS的开发(内容与RxJava相似)
案例:基于RxJS开发Follower关注
类似对微博或Twitter人员的关注,实现功能包括:
显示Follower名单
清除Follower列表中的列表项
刷新Follower列表