天天看点

spring5入门(二十五):Reactor

  • 起步
1、响应式编程操作中,Reactor 是满足 Reactive 规范框架
2、Reactor 有两个核心类,Mono 和 Flux,这两个类实现接口 Publisher,提供丰富操作符。Flux 对象实现发布者,返回 N 个元素;Mono 实现发布者,返回 0 或者 1 个元素
3、Flux 和 Mono 都是数据流的发布者,使用 Flux 和 Mono 都可以发出三种数据信号:元素值,错误信号,完成信号,错误信号和完成信号都代表终止信号,终止信号用于告诉订阅者数据流结束了,错误信号终止数据流同时把错误信息传递给订阅者      
  • Flux可以传递多个信号给订阅者
  • spring5入门(二十五):Reactor
  • Mono只能传递1个信号给订阅者
  • spring5入门(二十五):Reactor
  • 代码案例
# 导入依赖
<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中进行平方的操作,出来后变成蓝色的元素      
spring5入门(二十五):Reactor
  • flatMap 元素映射为流:把每个元素转换流,把转换之后多个流合并大的流
例如初始元素为上面的圆形元素,经过flatMap加工后,合并成1个大的流      
spring5入门(二十五):Reactor
  • ​SpringWebflux 基于 Reactor,默认使用容器是 Netty,Netty 是高性能的 NIO 框架,异步非阻塞的框架​

  • BIO
  • spring5入门(二十五):Reactor
  • NIO
  • spring5入门(二十五):Reactor
  • ​SpringWebflux 执行过程​

  • SpringWebflux 核心控制器 DispatchHandler,实现接口 WebHandler
  • 接口 WebHandler 有一个方法
  • spring5入门(二十五):Reactor
  • 查看headle方法
  • SpringWebflux 里面 DispatcherHandler,负责请求的处理
* HandlerMapping:请求查询到处理的方法
* HandlerAdapter:真正负责请求处理
* HandlerResultHandler:响应结果处理      
  • SpringWebflux 实现函数式编程的2个接口
RouterFunction(路由处理)
HandlerFunction(处理函数)