spring5入门(二十五):Reactor
- 起步
1、响应式编程操作中,Reactor 是满足 Reactive 规范框架
2、Reactor 有两个核心类,Mono 和 Flux,这两个类实现接口 Publisher,提供丰富操作符。Flux 对象实现发布者,返回 N 个元素;Mono 实现发布者,返回 0 或者 1 个元素
3、Flux 和 Mono 都是数据流的发布者,使用 Flux 和 Mono 都可以发出三种数据信号:元素值,错误信号,完成信号,错误信号和完成信号都代表终止信号,终止信号用于告诉订阅者数据流结束了,错误信号终止数据流同时把错误信息传递给订阅者
-
Flux可以传递多个信号给订阅者
-
Mono只能传递1个信号给订阅者
-
代码案例
# 导入依赖
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
<version>3.1.5.RELEASE</version>
</dependency>
public class TestReactor {
public static void main(String[] args) {
//just方法直接声明,使用subscribe方法订阅
Flux.just(1,2,3,4).subscribe(System.out::print);
Mono.just(1).subscribe(System.out::print);
//其他的方法
Integer[] array = {1,2,3,4};
Flux.fromArray(array);
List<Integer> list = Arrays.asList(array);
Flux.fromIterable(list);
Stream<Integer> stream = list.stream();
Flux.fromStream(stream);
}
}
- 三种信号特点
错误信号和完成信号都是终止信号,不能共存的
如果没有发送任何元素值,而是直接发送错误或者完成信号,表示是空数据流
如果没有错误信号,没有完成信号,表示是无限数据流
-
操作符:对数据流进行一道道操作,成为操作符
-
map 元素映射为新元素
例如绿色的元素为1、2、3,在map中进行平方的操作,出来后变成蓝色的元素
- flatMap 元素映射为流:把每个元素转换流,把转换之后多个流合并大的流
例如初始元素为上面的圆形元素,经过flatMap加工后,合并成1个大的流
-
SpringWebflux 基于 Reactor,默认使用容器是 Netty,Netty 是高性能的 NIO 框架,异步非阻塞的框架
-
BIO
-
NIO
-
SpringWebflux 执行过程
-
SpringWebflux 核心控制器 DispatchHandler,实现接口 WebHandler
-
接口 WebHandler 有一个方法
-
查看headle方法
-
SpringWebflux 里面 DispatcherHandler,负责请求的处理
* HandlerMapping:请求查询到处理的方法
* HandlerAdapter:真正负责请求处理
* HandlerResultHandler:响应结果处理
- SpringWebflux 实现函数式编程的2个接口
RouterFunction(路由处理)
HandlerFunction(处理函数)