一书斜、Lifecycle
二怔揩、綜合實(shí)戰(zhàn)
三猴娩、現(xiàn)代分布式系統(tǒng)復(fù)雜的網(wǎng)絡(luò)通信挑戰(zhàn)
最大問題一個Http請求對應(yīng)一個Thread
同步模型 vs 異步模型 (thread pre request vs reactor)
輪詢所有事件层亿,經(jīng)典事件驅(qū)動模型,好處是一個線程不止服務(wù)一個請求诗箍,但是編寫代碼困難,需要知道哪個請求每次寫幾個字節(jié)去維護(hù)狀態(tài)
由于異步編程能很好應(yīng)對互聯(lián)網(wǎng)高峰值高低谷的請求挽唉,所以Netty封裝了NIO變成一個Web服務(wù)器框架供大家使用滤祖,但是Netty很難用需要對框架有很多理解才能寫出沒有Bug的代碼,一旦出現(xiàn)Bug也很難解決瓶籽。Netty無法應(yīng)對數(shù)據(jù)庫查詢的時候JDBC本身就是同步這一狀況——于是引出了Spring Reactive stack從底層到頂層全都是異步
四匠童、Spring Reactive stack
也得益于Reactor Netty的出現(xiàn)協(xié)助底層通訊
4.1)Reactor Netty
Reactive出現(xiàn)后,Netty改動一下出現(xiàn)Reactor Netty棘劣,隨后Spring在此基礎(chǔ)上開發(fā)了Spring Reactive
Netty向外暴露了Httpserver.handler()接口俏让,Spring自己編寫的Handler將Reactor Netty和Spring Reactive橋接起來
4.2)WebMVC vs WebFlux
4.3)Springboot 如何選用Reactive棧
4.4)Spring webflux 核心組件
注解方式
函數(shù)式編程請求路由
服務(wù)器主動推消息
WebHandler API
4.5)Webflux 相關(guān)配置
從上述類中可發(fā)現(xiàn)WebFlux核心組件的具體實(shí)現(xiàn)
4.6)請求鏈——描述了Spring如何和Reactive Netty橋接
經(jīng)過一層層最終通過DispatcheHandler進(jìn)行請求的分發(fā)之后調(diào)用我們寫的業(yè)務(wù)接口
HttpServerHandler這個類屬于Netty
Spring用來橋接Netty的類
此類封裝了一些東西,相當(dāng)于上文WebHandler API那張圖
concatMap就是一個一個來,next是找到了就拿一個mapping出來
getHandler()
invokeHandler()
4.7)RouterFunctionBuilder
輕量級WebFlux首昔,沒有IOC也沒有注解映射
4.8)HandlerMapping & ResultHandler
函數(shù)式結(jié)果處理
4.9)Reactive DB
使用了Reactive數(shù)據(jù)庫就不能使用同步阻塞的JDBC