公司最近想使用响应式技术的新开发技术架构
后端:WebFlux+R2BDC+WebClient+DatabaseClient+Reactive Transaction+Reactive Redis
什么是响应式编程?
响应式编程(reactive programming)是一种基于数据流(data stream)和变化传递(propagation of change)的声明式(declarative)的编程范式。
怎么理解变化传递(propagation of change)?
在命令式编程(我们的日常编程模式)下,式子a=b+c,这就意味着a的值是由b和c计算出来的。如果b或者c后续有变化,不会影响到a的值。
在响应式编程下,式子a:=b+c,这就意味着a的值是由b和c计算出来的。但如果b或者c的值后续有变化,会影响到a的值。
怎么理解数据流和声明式呢?
本来数据是我们自行处理的,后来我们把要处理的数据抽象出来(变成了数据流),然后通过API去处理数据流中的数据(是声明式的)。
比如下面的代码;将数组中的数据变成数据流,通过显式声明调用.sum()来处理数据流中的数据,得到最终的结果:
响应式编程的场景应用
(1)比如一个日志监控系统,我们的前端页面将不再需要通过“命令式”的轮询的方式不断向服务器请求数据然后进行更新,而是在建立好通道之后,数据流从系统源源不断流向页面,从而展现实时的指标变化曲线;
(2)再比如一个社交平台,朋友的动态、点赞和留言不是手动刷出来的,而是当后台数据变化的时候自动体现到界面上的。
异步非阻塞
响应式编程离不开异步非阻塞,响应式编程它是异步的,也可以理解成变化传递它是异步执行的。
JDK8 Stream流是同步的,它就不适合用于响应式编程,JDK9 已经支持响应式流了。
JDK9 Reactive
好文/参考
WebFlux
https://zhuanlan.zhihu.com/p/92460075
R2BDC