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