1.简介

以下是本人总结的一些知识点,如果想看官方文档这:反应式堆栈上的 Web (spring.io)

Spring WebFlux是随Spring 5推出的是一个响应式编程和异步非阻塞的Web开发框架, 它与Spring MVC不同,它不需要Servlet API,完全异步和非阻塞,以Reactor为基础实现响应式编程。

了解Spring WebFlux首先先了解异步非阻塞与传统的同步堵塞式有什么区别?

这里我简单的对这两个打个比方:

同步编程: 同步也就是A节点发送了一个消息给B节点,等待收到 B 节点的回复,以便完成某件后续事情,这个等待的要求就叫做同步!(不管A节点后面的操作需不需要B节点的结果,都要等待!) 异步编程:异步也就是A节点发送一个消息给B节点,可以不等待B节点的回复,直接可以进行其他操作。可以通过一段时间轮询或者另外开一个线程去接收B节点的结果(前提是A节点不依赖B节点的结果才行)!

双方的利:

同步编程: 1. 同步的流程对结果处理通常更为简单,可以就近处理。 2.因为在执行的过程中,同步需要等待下一个节点的回复所以被叫做同步堵塞式编程, 3.同步可以很容易捕获、处理异常。 异步编程 : 1.异步流程可以立即给调用方返回初步的结果,也可以延迟给调用方最终的结果数据,在此期间可以做更多额外事情, 2.在执行的过程中,可以释放占用的线程的资源也可以创建新的线程等,避免阻塞。所以被叫做异步非堵塞式编程 3.可以多个调用的结果出来后,统一返回一个集合,提升了效率。

在响应式编程中,我们不再用对象的概念来对现实世界进行建模,而是使用流的思想对信息进行拆分和聚合。在面向对象编程中,数据信息,数据更新方法,绘制方法这三大要素都是描述具体类的,他们被类的定义聚合在了一起;而在响应式编程中,不再强调“关系”,而是将数据和变化聚合在一起,将处理方式聚合在一起。
在传统编程中,经常会有一个无法直接用于最终场景的数据集合,所以需要手动做一些后,再处理,最终把要使用的数据提供给消费模块;而在响应式编程中是“直接告诉程序你最终想要获得什么数据”,然后将程序的加工流程内化到生产过程中,从而当消费模块得到数据时,直接就可以使用,而不需要再做过多的处理,这对于消费者来说体验感杠杆的.

这是一个自然而然的问题,但却设置了一个不合理的二分法。实际上,两者协同工作以扩展可用选项的范围。两者旨在实现彼此的连续性和一致性,它们可以并排使用,并且双方的反馈使双方都受益。下图显示了两者之间的关系,它们有什么共同点,以及它们各自唯一支持的内容:

如果你在纠结的话以下有很好的建议:

如果您有一个运行良好的Spring MVC应用程序,则无需更改。命令式编程是编写、理解和调试代码的最简单方法。您有最多的库选择,因为从历史上看,大多数库都是阻塞的。

如果您已经在购买非阻塞Web堆栈,Spring WebFlux提供了与该领域其他服务器相同的执行模型优势,并且还提供了服务器选择(Netty,Tomcat,Jetty,Undertow和Servlet 3.1 +容器),选择编程模型(带注释的控制器和功能Web端点),以及选择反应式库(Reactor, RxJava或其他)。

如果您对与 Java 8 lambdas 或 Kotlin 一起使用的轻量级、功能性 Web 框架感兴趣,则可以使用 Spring WebFlux 函数式 Web 端点。对于要求不太复杂的小型应用程序或微服务来说,这也是一个不错的选择,这些应用程序或微服务可以从更大的透明度和控制中受益。

在微服务架构中,您可以混合使用Spring MVC或Spring WebFlux控制器或Spring WebFlux功能端点的应用程序。在两个框架中支持相同的基于注释的编程模型,可以更轻松地重用知识,同时为正确的工作选择正确的工具。

评估应用程序的一种简单方法是检查其依赖关系。如果您有阻塞持久性API(JPA,JDBC)或网络API要使用,Spring MVC至少是常见架构的最佳选择。使用 Reactor 和 RxJava 在单独的线程上执行阻塞调用在技术上是可行的,但你不会充分利用非阻塞的 Web 堆栈。

如果您有一个调用远程服务的Spring MVC应用程序,请尝试反应式.您可以直接从Spring MVC控制器方法返回反应式类型(Reactor,RxJava或其他)。每次调用的延迟或调用之间的相互依赖性越大,收益就越显著。弹簧MVC控制器也可以调用其他反应组件。WebClient

如果你有一个大型团队,请记住在转向非阻塞、函数式和声明式编程的过程中,学习曲线陡峭。在没有完全开关的情况下启动的一种实用方法是使用反应式 。除此之外,从小处着手,衡量收益。我们预计,对于广泛的应用,这种转变是不必要的。如果您不确定要寻找哪些好处,请首先了解非阻塞 I/O 的工作原理(例如,单线程 Node.js 上的并发性)及其效果。WebClient

SpringMVC方式实现: 同步阻塞,基于SpringMVC+Servlet+Tomcat SpringWebflux方式实现: 异步非阻塞,基于SpringWebflux+Reactor+Netty

2.Reactor

Reactor 是 WebFlux 的御用响应式编程库,WebFlux 的编程模式发生了根本性改变,使用响应式编程而是不传统的命令式编程。简单来说,Reactor 说是一个响应式编程框架,又快又不占用内存的那种。
来自于一个团队。 Spring 5 使用 WebFlux开发响应式 、高性能WEB 应用。

2.3建议

使用时都需要使用大量的lambda与函数式 语法

后期会出一篇lambda的文章....

 

下一篇Spring WebFlux入门(二)......​