SpringBoot2.0之WebFlux解析及實戰

SpringBoot我是從1.2開始用的,我彷彿停留在1.5剛出來,支持了動態修改日誌級別的時候,可突然之間2.0就出來了,貌似只有短短一年半的時間,突然感覺到了危機感,彷彿自己馬上就要被淘汰了,在經過學習之後,將自己的項目demo和我對SpringBoot2.0的理解,分享給大家! 如果有錯誤的地方,歡迎留言指出,最後謝謝各位,觀看!

SpringBoot2.0之WebFlux解析及實戰

圖先放這裡,先不著急,先看下,有一個印象,後面會說到。

先說一下官方的SpringBoot2.0新特性描述

SpringBoot2.0新特性

  • 1. 編程語言Java8+,和當前火爆的Kotlin

  • 2. 底層框架Spring Framwork 5.0.x


我們分析下2.0的新特性為什麼編程語言要從Java8開始呢?

  • 一個重要的原因就是使用Java8的Lambda表達式和Stream流處理

  • 包括Spring Framwork 5.0.x也是要用到Java8的新特性.

當我們對SpringBoot2.0的新特性有一個認識的時候,再來看開頭的第一張圖片

上面開篇截取Spring.io官網的圖片。我們就能對SpringBoot1.0和2.0在心裡有一個判斷

  • SpringBoot1.0是僅支持Servlet Containers->Servlet API屬於傳統方式

  • SpringBoot2.0在支持1.0的特性上,同時添加了一個新特性就是WebFlux,可以使用Netty及Servlet3.1作為容器,基於 Reactive Streams 流處理。

當讀到這裡可能就有點懵了,Netty和Servlet3.1是一個什麼鬼? Netty是什麼先不介紹,先說Servlet3.1在舉例的時候,會提到Netty。


那麼我們在分析Servlet3.0之前和3.0的區別?

  • 3.0之前Servlet 線程會一直阻塞,只有當業務處理完成並返回後時結束 Servlet線程。

  • 3.0規範其中一個新特性是異步處理支持,即是在接收到請求之後,Servlet 線程可以將耗時的操作委派給另一個線程來完成,在不生成響應的情況下返回至容器

這樣說可能大家還不太容易理解,我們來舉一個例子

eg: 我們假設,設置tomcat最大線程為200,遇到200個非常耗時的請求

  1. 那麼當有200個線程同時併發在處理,那麼當來201個請求的時候,就已經處理不了,因為所有的線程都阻塞了。這是3.0之前的處理情況

  2. 而3.0之後異步處理是怎樣處理呢?學過Netty通信框架的同學會比較容易理解一點,Servlet3.0類似於Netty一樣就一個boss線程池和work線程池,boss線程只負責接收請求,work線程只負責處理邏輯。那麼servlet3.0規範中,這200個線程只負責接收請求,然後每個線程將收到的請求,轉發到work線程去處理。因為這200個線程只負責接收請求,並不負責處理邏輯,故不會被阻塞,而影響通信,就算處理非常耗時,也只是對work線程形成阻塞,所以當再來請求,同樣可以處理,其主要應用場景是針對業務處理較耗時的情況可以減少服務器資源的佔用,並且提高併發處理速度。

好了,當你已經讀到這裡,相信已經對SpringBoot1.0和SpringBoot2.0有一個比較清晰的認識了(當用過Netty通信框架類的童鞋一定是非常清晰的,如果還不清晰,就要補補課了),所以我們不得不說SpringBoot2.0的性能一定是比1.0有所提升的。不過各有所愛,企業具體技術選型還要看業務需求,不能盲目追求新技術,畢竟新技術還不太穩定,沒有被大規模的實踐。好了,理論的知識就先講到這裡,開始實戰編碼吧。

項目實戰

通過上面的講解,我們對其有了一個簡單的認識,現在開始跟著我實戰吧 !

在做項目實戰的時候,我們要對下面兩個問題有所瞭解!當這兩個問題清楚後,實戰就異常簡單了

1. 我們知道SpringMVC是通過@Controller和@RequestMapping來定義路由的那麼WebFlux是怎麼定義路由的?

我們看上圖(下面的這兩個區別要注意,項目中會遇到)

  • 基於 Spring MVC 註解 @Controller 等

  • 基於 Functional 函數式路由是 RouterFunctions

- Flux 一種集合(0,n)

- Mono 一個實體包裝(0,1)

啟動時候添加測試數據

SpringBoot2.0之WebFlux解析及實戰

編寫業務處理層

SpringBoot2.0之WebFlux解析及實戰

編寫路由層

SpringBoot2.0之WebFlux解析及實戰


分享到:


相關文章: