WebFlux和Spring MVC比較

Spring WebFlux 和 Spring MVC

什麼是WebFlux

  • 是一個異步非阻塞的Web框架,它可以充分利用多核CPU的硬件資源去處理大量的併發請求
  • 優點:內部使用的是響應式編程,以Reactor庫爲基礎,基於異步和事件驅動,可讓咱們在不擴充硬件資源的前提下,提高系統的吞吐量和伸縮性。
  • 不能使接口的響應時間縮短,它僅僅可以提高吞吐量和伸縮性

應用場景

  • 特別適合在IO密集型的服務中,好比微服務網關。
  • PS: IO 密集型包括:磁盤IO密集型, 網絡IO密集型,微服務網關就屬於網絡 IO 密集型,使用異步非阻塞式編程模型,可以顯著地提高網關對下游服務轉發的吞吐量。

選WebFlux仍是Spring MVC

  • WebFlux不是 Spring MVC的替代方案!雖然 WebFlux 也能夠被運行在 Servlet 容器上(需是 Servlet 3.1+ 以上的容器),可是 WebFlux 主要仍是應用在異步非阻塞編程模型,而 Spring MVC 是同步阻塞的,若是你目前在 Spring MVC 框架中大量使用非同步方案,那麼,WebFlux 纔是你想要的,不然,使用 Spring MVC 纔是你的首選。web

  • 在微服務架構中,Spring MVC 和 WebFlux 能夠混合使用,好比已經提到的,對於那些 IO 密集型服務(如網關),咱們就可使用 WebFlux 來實現。spring

異同點

image-20191231142434301
異同點

注意點:編程

  • Spring MVC 由於是使用的同步阻塞式,更方便開發人員編寫功能代碼,Debug 測試等,通常來講,若是 Spring MVC 可以知足的場景,就儘可能不要用 WebFlux;
  • WebFlux 默認狀況下使用 Netty 做爲服務器;
  • WebFlux 不支持 MySql;

WebFlux如何分發

  • springmvc 是經過DispatcherServlet,而WebFlux是DispatcherHandler,它實現了WebHandler接口:
img
webHandler
img
handle
  • ①:ServerWebExchange 對象中放置每一次 HTTP 請求響應信息,包括參數等;
  • ②:判斷整個接口映射 mappings 集合是否爲空,空則建立一個 Not Found 的錯誤;
  • ③:根據具體的請求地址獲取對應的 handlerMapping;
  • ④:調用具體業務方法,也就是咱們定義的接口方法;
  • ⑤:處理返回的結果;
相關文章
相關標籤/搜索