Spring5的已經支持Reactor模型,主要提供開發者使用的是Mono和Flux,在Reator遵循ReactiveStreams的標準的API的現,Rxjava是在Reactor以前實現反應流式庫,Spring 5實現了 在Reactor-Netty基礎上實現SpringMVC的框架命名爲Spring Webflux,這是取代傳統的servlet API的異步框架.java
接下來,主要了解下Reactive Streams的標準.git
Publisher(發佈者) 數據提供者,提供給訂閱者使用github
Subscription(訂閱) 訂閱者訂閱的發佈者提供的數據markdown
Subscriber(訂閱者) 訂閱發佈者的數據框架
Processor(處理器) 這個接口集成了發佈者和訂閱者接口,因此處理器是發佈者和訂閱者均可以使用處理器. 異步
上面簡單的測試用例中,當執行subscribe方法時候,纔回去真實調用訂閱者去訂閱發佈者的元素. 從Mono的subscribe方法中,能夠看出這裏默認是建立的是 LambdaMonoSubscriber訂閱者,它實際上是對於consumer等函數式接口的封裝類,而後執行subscribe方法傳入該訂閱者. 若是publisher中間若是有優化的動做則會執行優化的操做,而後最後就是執行發佈者的subscribe方法發起訂閱. 接下來會執行調用MonoJust的subscribe方法,真實執行有actual這個訂閱者執行onSubscribe方法,這裏訂閱者對象實際 是ScalarSubscription標量的訂閱對象. 由Subscription對象調用request方法,向訂閱者發送訂閱元素請求元素個數的方法,默認是Long類型的最大值. 而後執行LambdaMonoSubscriber訂閱者的onNext對元素進行訂閱. LambdaMonoSubscriber的onNext就會對訂閱元素作消費者執行lambda函數的回調處理,打印出對應的元素數據.而且回調用onComplete,onError的調用.github上找了一個對於整個過程的時序圖,便於你們理解 函數
總結
今天主要是對於Reactor的Mono的執行過程有了一個淺析,後面會更加深刻理解它背後的原理.測試