今天我们开始来学习下 WebFlux
,为什么突然要学这个东西?
因为我之前是想学习 Spring Cloud Gateway
来着,然后发现它是基于 Spring5.0+SpringBoot2.0+WebFlux
等技术开发的。所以学之前才要来简单了解下 WebFlux
技术。
然后要学习 WebFlux
时我发现又需要 Java 8 中的函数式编程、Stream 流等技术作为前置知识。环环相扣啊,套娃一样。
所以前面还有两篇学习的文章:来系统学习下 lambda 表达式吧和来一起学习下 Java 8 的 Stream 流。
我只是想学下 Spring Cloud Gateway
而已,作为前置知识,WebFlux 我暂时也不打算深深的研究了,就先简单学习下吧。
话说这么多,开始今天的学习吧。
什么是 WebFlux
Spring Framework 中包含的原始 Web 框架 Spring Web MVC 是专门为 Servlet API 和 Servlet 容器构建的。反应式堆栈 Web 框架 Spring WebFlux 是在 5.0 版的后期添加的。它是完全非阻塞的,支持反应式流(Reactive Stream)背压,并在Netty,Undertow和Servlet 3.1 +容器等服务器上运行。
上面的文字和图片都是来自官网的。从中我们可以大概知道 Spring WebFlux
是对标 Spring MVC
的。
Spring WebFlux 是一个异步非阻塞式 IO 模型,通过少量的容器线程就可以支撑大量的并发访问。底层使用的是 Netty 容器,这点也和传统的 SpringMVC 不一样,SpringMVC 是基于 Servlet 的。
接口的响应时间并不会因为使用了 WebFlux 而缩短,服务端的处理结果还是得由 worker 线程处理完成之后再返回给前端。
反应式库
1. Reactive Stream
相信你应该注意到上面的一个名词 反应式流(Reactive Stream)。是什么意思呐?
我们先看下这个概念:
反应式编程(Reactive Programming) ,这是微软为了应对高并发环境下的服务端编程,提出的一个实现异步编程的方案。
反应式流(Reactive Stream) 就是反应式编程相关的规范,在 Java
平台上,由Netflix
(开发了 RxJava
)、TypeSafe
(开发了 Scala
、Akka
)、Pivatol
(开发了 Spring
、Reactor
)共同制定。
它由以下几个组件组成:
- 发布者:发布元素到订阅者
- 订阅者:消费元素
- 订阅:在发布者中,订阅被创建时,将与订阅者共享
- 处理器:发布者与订阅者之间处理数据
2. Reactor
Reactive Stream
是一套反应式编程的规范,但作为应用程序 API,应用程序肯定还是需要一个更高级、更丰富的功能 API 来编写异步逻辑。这就是 反应式库 所扮演的角色。
Reactor
框架是 Pivotal
基于 Reactive Programming
思想实现的。它符合 Reactive Streams
规范。它提供了