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(处理函数)
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术