天天看點

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(處理函數)