SpringWebFlux
SpringWebflux介绍
-
spring5添加新的模块,用于web开发的功能和SpringMVC类似,Webflux使用当前一种比较流程响应式编程出现的框架
-
使用传统web框架,比如SpringMVC,这些基于Servlet容器,Webflux是一种异步非阻塞的框架,异步非阻塞的框架在Servlet3.1以后才支持,核心是基于Reactor的相关API实现的
-
什么是异步非阻塞?
异步和同步针对调用者:调用者发送请求(等待回应才去处理其他事情叫同步,不需要等待回应即可处理其他事情叫异步)
阻塞和非阻塞针对被调用者:处理完请求才给出反馈叫阻塞,不需要处理完请求就给出反馈叫非阻塞
-
Webflux的特点
异步非阻塞:在有限资源下提高系统吞吐量和伸缩性,以Reactor为基础实现响应式编程
函数式编程:Webflux使用Java8函数式编程实现路由请求
-
比较SpringMVC
两个框架都可以使用注解方式,都运行在Tomcat容器中
SpringMVC采用命令式编程,Webflux采用异步非阻塞响应式编程
响应式编程
-
什么是响应式编程?
响应式编程是一种面向数据流和变化传播的编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播
-
Java8及其之前的版本
提供观察者模式两个类Observe和Observable
public class ObserverDemo extends Observable { public static void main(String[] args) { ObserverDemo observer=new ObserverDemo(); observer.addObserver((o,arg)->{ //添加观察者 System.out.println("发生了变化"); }); observer.addObserver((o,arg)->{ System.out.println("准备改变"); }); observer.setChanged();//监控数据是否发生变化 observer.notifyObservers();//通知 } }
Reactor实现响应式编程
-
响应式编程操作中,Reactor是满足Reactive规范框架
-
Reactor有两个核心类,Mono和Flux,这两个类实现接口Publisher,提供丰富操作符
Flux对象实现发布者,返回N个元素,Mono实现翻发布者,返回0或者1个元素
-
Flux和Mono都是数据流的发布者,都可发出三种信号
元素值、错误信号、终止信号
错误信号:终止数据流,同时传递错误信息给订阅者
错误信号和完成信号:代表终止信号,告诉订阅者数据流结束了
-
代码演示
引入reator依赖
<dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-core</artifactId> <version>3.2.3.RELEASE</version> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <version>3.2.3.RELEASE</version> <scope>test</scope> </dependency>
public class TestReactor { public static void main(String[] args) { //just方法直接声明 Flux.just(1,2,3,4); Mono.just(99); //其它方法 Integer[] array={ 1,2,3,4}; Flux.fromArray(array); List<Integer> list= Arrays.asList(array); Flux.fromIterable(list); Stream<Integer> stream=list.stream()