springboot 學習之路 18(webflux詳細介紹(2))

webflux的詳細介紹

  引言:上一節已經簡單介紹webflux的一些基本概念,本章繼續學習webflux的原理和實戰方面的東西:mysql

  Spring WebFlux架構:react

    

    note:注意理解上面這張圖。下面解釋引用百度web

1)服務端技術棧

    Spring提供了完整的支持響應式的服務端技術棧。

            如上圖所示,左側爲基於spring-webmvc的技術棧,右側爲基於spring-webflux的技術棧,

            Spring WebFlux是基於響應式流的,所以能夠用來創建異步的、非阻塞的、事件驅動的服務。它採用Reactor做爲首選的響應式流的實現庫,不過也提供了對RxJava的支持。
            因爲響應式編程的特性,Spring WebFlux和Reactor底層須要支持異步的運行環境,好比Netty和Undertow;也能夠運行在支持異步I/O的Servlet 3.1的容器之上,好比Tomcat(8.0.23及以上)和Jetty(9.0.4及以上)。
            從圖的縱向上看,spring-webflux上層支持兩種開發模式: 
            相似於Spring WebMVC的基於註解(@Controller、@RequestMapping)的開發模式;
            Java 8 lambda 風格的函數式開發模式。
            Spring WebFlux也支持響應式的Websocket服務端開發。
            由此看來,Spring WebFlux與Vert.x有一些相通之處,都是創建在非阻塞的異步I/O和事件驅動的基礎之上的。
2)響應式Http客戶端

    此外,Spring WebFlux也提供了一個響應式的Http客戶端API WebClient。它能夠用函數式的方式異步非阻塞地發起Http請求並處理響應。其底層也是由Netty提供的異步支持。

            咱們能夠把WebClient看作是響應式的RestTemplate,與後者相比,前者:

            是非阻塞的,能夠基於少許的線程處理更高的併發;
            可使用Java 8 lambda表達式;
            支持異步的同時也能夠支持同步的使用方式;
            能夠經過數據流的方式與服務端進行雙向通訊。
            固然,與服務端對應的,Spring WebFlux也提供了響應式的Websocket客戶端API。

springboot_webflux   demo案例:

  根據上面原理圖  webflux的實現有兩版,一是基於springmvc,一種基於響應式流的,,下面我來逐一介紹一下:(須要學習的儘可能跟着個人步驟走,我會把出錯的地方標出spring

  基礎部分搭建(無論哪一種實現,都須要項目準備工做):sql

    第一步:引入項目依賴,我後期會演示mongodb的操做,此次一下把依賴都引入:mongodb

      

    第二步:把allpication.yml 的mongodb配置上,編程

      

  

從webflux開始,個人demo採用yaml語法的配置文件來說解,前面採用的都是properties文件,是爲了你們方便入門,後期我採用application.yml文件,
  補充:配置文件的優先順序: 項目路徑下/conf/ > 項目路徑下/ > /resources/conf/ > resources/ ( properties後綴優先 yml文件的加載順序)

  1>註解式:

    1>> 只是爲了測試,直接寫測試控制器了,實戰中應該從Handler中獲取tomcat

    

    2>>  啓動springboot項目:springboot

      是netty啓動,上節介紹過,webflux是響應式框架,默認是netty啓動(能夠改tomcat toncat8之後已經支持響應式了)服務器

      請求測試以下:

      

    

Netty是一套異步的、事件驅動的網絡應用程序框架和工具,可以開發高性能、高可靠性的網絡服務器和客戶端程序,所以與一樣是異步的、事件驅動的響應式編程範式吻合。
  在Java 7推出異步I/O庫,以及Servlet3.1增長了對異步I/O的支持以後,Tomcat等Servlet容器也隨後開始支持異步I/O,而後Spring WebMVC也增長了對Reactor庫的支持,
  因此上邊若是不是將替換爲,而是增長的依賴的話,仍然能夠用註解的方式開發基於Tomcat的響應式應用。spring-boot-starter-webspring-boot-starter-WebFluxreactor-core

  註解式就簡單介紹一下,重點在響應式開發,webflux是響應式框架,我會着重介紹一下響應式開發的步驟。註解式只是spring團隊爲了更好的遷移而提供給你們的,由於咱們都是用上面那種開發方式開發代碼  

  2>webflux的響應式開發:

    響應式開發主要在handler和route上,handler至關於咱們原來使用的 server | controller   官方定義是處理,就是寫邏輯代碼的地方,而route至關於RequestMapping() 至關於配置映射的地方,官方定義是路由

    2.1>測試handler以下: (方法應該從數據獲取數據進行返回,我只是作測試,就用打印時間代替了)

     

    2.2> 編輯route 

       

    2.3>啓動,測試:

      

在WebFlux中,請求和響應再也不是WebMVC中的ServletRequest和ServletResponse,而是ServerRequest和ServerResponse。後者是在響應式編程中使用的接口,它們提供了對非阻塞和回壓特性的支持,以及Http消息體與響應式類型Mono和Flux的轉換方法。

    注意:到這,webflux的響應式開發配置基本搭建完畢,後面會繼續介紹mongodb的操做


 

webflux操做mongodb:

  webflux不支持mysql,  使用mongodb來進行演示 (mongodb配置已經在準備時配置進去了)   

  第一步:建立實體User

   

  在這個mongodb的啓動後,會自動在對應的mongodb中建立一個user集合,名字就是實體類名稱小寫。

  第二步:dao實現:  

    note:與非響應式Spring Data的CrudReposity對應的,響應式的Spring Data也提供了相應的Repository庫:ReactiveCrudReposity,固然,咱們也可使用它的子接口ReactiveMongoRepository

       ReactiveCrudRepository的泛型分別是UserID的類型;

    

  第三步:UserHandler(邏輯處理代碼)

    

  第四步:webFlux的註解實現controller: 方便你們上手 ( 響應式後期再說:)

    

  最後啓動測試便可:

    截圖不放了。下面我介紹幾個問題點: 


問題: 

  1>  怎麼驗證響應式流:

    

    啓動測試就能夠發現查詢所用是一個一個出來的,而不是一下返回。

 


 

 異步 阻塞的概念還須要你們理解,這是服務端大效果演示,還有一種客戶端的演示,待下節介紹

相關文章
相關標籤/搜索