java架构师培训-java响应式框架的认识和特点

Reactor3是一个围绕ReactiveStreams规范构建的库,其中介绍了JVM上的反应式编程示例。当前,Spring5引入的Webflux是由Reactor3实现的反应性Web框架。SpringCloudGateway是Webflux的网关场景实践。如果您想很好地学习上述两种技术,则必须了解反应式编程和Reactor3。本文中的编辑器将带您简要了解反应式编程和Reactor3。

为什么要搞响应式

有这么一个场景,产品提了一个这么需求:商品打折,根据商品的原价来计算商品的折扣价。这个需求不是很简单嘛,按照我们通常的做法,搞一个如下的方法就搞定了。

java架构师培训

但是,如果我更改折扣,那么此时应该说要重新计算。这会再次进行吗?我们需要花费精力来维护这一过程逻辑。那么我的下游可以直接对上游的变化做出反应吗?就像Excel电子表格计算一样,下游总是侦听上游,如果有一点麻烦,结果将改变。这种潜在需求是敏感的。反应式编程使用某些运算符来帮助您建立这种关系,而不是执行某些分配命令。这种思想实际上已经在某些前端框架中流行了很长时间了。

响应式的特点

基于上面的一个简单示例。我们可以看到,如果它具有响应性,那么肯定有一个触发点。就像当我们单击计算机桌面上的QQ图标时,一只企鹅跳了起来。我们单击了Thunder图标,有一只鸟拍打着翅膀。计算机仅维护单击该图标的事件。换句话说,反应式编程必须是事件触发机制。并且以异步和非阻塞的方式发送和接收它。不是我们通常的请求-响应同步模型。

事件驱动的系统通过push而不是pull来处理,生产者有消息时才推送消息给消费者,而不是通过一种浪费资源方式:让消费者不断地轮询或等待数据。

基于这个机制相对高的吞吐量和实时响应也是响应式的特点。

事件驱动由于Publisher只关心数据源,Consumer只用关心对处理结果的消费。完全是松耦合的。这就给我们很大的操作空间来定制化我们的逻辑组合,从而使异步代码更易读和可维护。

Reactor3简介

Reactor3框架是Pivotal(Spring母公司)基于ReactiveProgramming思想实现的。它实现了ReactiveStreams(该规范由Netflix、TypeSafe、Pivotal等公司发起的响应式规范)。其他诸如RxJava2,AkkaStreams,Vert.x和Ratpack也都实现了该规范。

Reactor有一个很重要概念的就是backpressure。由于生产者消费者处理数据的能力不对等,很容易产生下游消费能力过载的问题。这就需要一个backpressure处理,来告诉上游生产者避免过载。打个比方,一个人负责放水,一个人负责接水,如果放水的速度太快,水桶势必会溅出来,接水的人会根据情况来告诉放水的人什么速度最合适,并且在快满的时候告知放水人关闭开关。

Reactor还添加了运算符的概念,这些运算符被链接在一起以描述在每个阶段对数据应用的处理。应用运算符返回一个中间Publisher(实际上,它可以被认为是上游运算符的订阅者和下游的发布者)。数据的最终归纳点在最终Subscriber中(这里还定义了用户角度的业务逻辑)。还拿放水举例,如果我们放水不是为了单纯放水而是为了制造肥宅快乐水。这样就不是一个人接水了,中间加入了原浆流程,下一个接的人接到的是原浆勾兑水,那么这个人充当了源头的消费者,也充当了他下游的生产者。他的下游还有加气儿的。他下游的下游还有罐装等一系列操作。到最后装箱整个工艺才算告一段落。另外如果下游没有开工,上游也是不开工的。这样也符合常理,不可能上游空转。

java架构师培训

上图揭示了一个最小单元的Reactor流程。其实这些概念更重要的是理解它们。理解了Reactor的特性才能为后面更好的学习java响应式编程打下基础。后面我们会一起慢慢深入响应式这个话题。

推荐阅读:java架构师学习路线:分布式架构为什么需要数据中心
如果你想了解更多关于java架构师的专业知识,可以加入JAVA架构师交流群:1037935907,里面都是同行,有资源分享包括但不限于(分布式架构、高可扩展、高性能、高并 发、Jvm性能调优、Spring,MyBatis,Nginx源码分析,Redis,ActiveMQ、、Mycat、Netty、Kafka、Mysql 、Zookeeper、Tomcat、Docker、Dubbo、Nginx)。欢迎一到五年的工程师加入,合理利用自己每一分每一秒的时间来学习提升自己,不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代!

猜你喜欢

转载自blog.csdn.net/weixin_49698883/article/details/113599580