1. Spring WebFlux 2小時快速入門
Spring 5 之使用Spring WebFlux開發響應式應用。
- lambda與函數式(15min)
- Reactor 3 響應式編程庫(60min)
- Spring Webflux和Spring Data Reactive開發響應式應用(45min)
通過以上內容相信可以對Spring 5.0 推出的響應式開發有了初步的體會。如果希望有更加深入的瞭解,歡迎閱讀下邊的系列文章——
2. 響應式Spring的道法術器
這個系列的文章是爲了記錄下自己學習Spring響應式編程的所得,也希望能夠幫助到更多的朋友。
原諒我標題黨了,希望能從道、法、術、器四個層面儘量全面地學習和介紹關於Spring響應式編程的方方面面。
【道】響應式編程的概念、原則、特性與方法
- 1.1 什麼是響應式編程:響應式編程=數據流+變化傳遞+聲明式;
- 1.2 響應式流:響應式流的異步非阻塞和回壓(也有翻譯爲“背壓”、“負壓”的)特性,分析與多線程併發方案以及基於回調和CompletableFuture的異步開發方式的不同;
- 1.3 Hello,reactive world,通過實例學習用lambda、Reactor 3、Spring Webflux和Spring Data Reactive開發響應式應用的方法和技巧;
- 1.4 異步非阻塞有多給力,使用gatling對基於Spring Webmvc和Spring Webflux的Web服務端應用進行負載測試,通過Spring WebClient與RestTemplate的性能對比並結合Netflix的案例瞭解異步Http客戶端的性能提升,然後使用YCSB對MongoDB的同步和異步驅動進行負載測試,通過測試數據分析異步非阻塞的性能優勢;
- 1.5 響應式系統,介紹響應式宣言,以及響應式編程和響應式系統的區別與聯繫。
【法】系統介紹響應式編程庫的使用與原理
- 2.1 照虎畫貓深入理解響應式流規範,介紹響應式流規範及響應式開發核心接口,通過自己動手編寫響應式開發庫,瞭解內部實現機制,是理解本章後續內容的基礎,重要。
- 2.2 自定義數據流,在Reactor 3中如何通過
generate
和create
等方法生成自定義的數據流,是命令式編程與響應式編程的橋樑。然後通過實現一個docker事件推送的例子進一步熟悉它。 - 2.3 Reactor的backpressure(背壓/回壓)策略,介紹Reactor3中的幾種回壓策略,及其在生成和消費數據流的時候如何起作用。
- 2.4 Reactor調度器與線程模型,從原理角度分析Reactor 3的調度器以及
subscribeOn
和publishOn
的作用原理,最後介紹用於並行執行的ParallelFlux
。 - 2.5 Reactor 3 operators,Reactor 3提供了豐富的操作符,介紹如何選擇合適的操作符,以及如何進行操作符的打包。
- 2.6 測試,介紹使用
StepVerifier
、PublisherProbe
和TestPublisher
三種工具進行自動化測試的方法。 - 2.7 調試,介紹基於hook的全局調試模式、基於
checkpoint()
的局部調試模式的調試方法,以及之前用過的log()
操作符觀察內部執行情況。 - 2.8 Hot vs Cold,介紹使用Reactor 3 操作“熱序列”的方法。
- 2.9 Processor,介紹Reactor 3內置的幾種Processor的實現。
- 2.10 操作符熔合,介紹操作符熔合的優化思路。
【術】響應式關鍵技術與底層機制
預告:看網上關於Actor/Reactor/Preactor模型、異步I/O的內容很詳細也很棒,我就不贅述了,初步考慮直接通過模仿reactor-netty項目,從零編寫一套基於Netty的響應式服務器和客戶端,相信無論是對於我自己還是對於關注本系列文章的朋友來說,都是一次不錯的提升Netty和響應式編程的嘗試,也是爲下一章做鋪墊。這樣一套基於Netty的響應式服務器和客戶端工具是Spring WebFlux與Netty之間的適配層,用於將Netty的入站和出站數據進行響應式轉換。
(最近事情有點多,會稍遲些發出來,還是有點難的,光讀源碼就讀了兩週,囧)
【器】實例瞭解Spring各種響應式組件
系統瞭解Spring中支持響應式的組件,如Spring WebFlux、Spring Data Reactive、Spring Security Reactive,以及使用Spring Boot 2和Spring Cloud構建響應式系統的方法。
(學習中)
系列文章目錄
相關源碼見:https://github.com/get-set/get-reactive。
Reactor3 Reference Guide參考文檔中文版(跟隨版本更新):http://blog.csdn.net/get_set/article/details/79471861。
- (1)什麼是響應式編程
- (2)響應式流
- ——附1:多線程併發方案的不爽
- (3)lambda與函數式
- (4)Reactor快速上手
- (5)Spring WebFlux快速上手(五個例子,含響應式數據訪問、服務端推送)
- (6)Spring WebFlux服務端性能測試
- (7)WebClient與RestTemplate性能對比
- (8)案例:Netflix對API網關的異步化改造
- (9)異步Mongo驅動的性能測試
- (10)響應式宣言、響應式系統、響應式編程
- (11)DIY瞭解響應式流實現原理
- (12)自定義數據流(實戰Docker事件推送的REST API)
- (13)Reactor的backpressure策略
- (14)Reactor調度器與線程模型
- (15)Reactor 3 Operators
- ——附2:Reactor 3 之選擇合適的操作符
- (16)Reactor的測試——響應式Spring的道法術器
- (17)Reactor的調試——響應式Spring的道法術器
- (18)Hot vs Cold——響應式Spring的道法術器
- (19)Reactor Processors——響應式Spring的道法術器
- (20)操作符熔合——響應式Spring的道法術器
(未完待續)
2017年9月,Spring Framework 5發佈了其GA版本,這是自2013年12月以來的又一個大版本升級。除了一些人們期待已久的改進,最令人興奮的新特性是它提供了完整的端到端響應式編程的支持。這是一種不同於Servlet的全新的編程範式和技術棧,它基於異步非阻塞的特性,能夠藉助EventLoop以少量線程應對高併發的訪問,對微服務架構也頗有助益。不誇張的說,Spring 5使得Java世界擁有了Node.js那樣骨骼驚奇的神器。
2018年3月1號,Spring Boot 2.0如約發佈,也是一個大版本升級。
從這個圖就可以看出對支持Spring 5的Spring Boot 2.0來說,新加入的響應式技術棧是其主打核心特性。具體來說,Spring Boot 2支持的響應式技術棧包括如下:
- Spring Framework 5提供的非阻塞web框架Spring Webflux;
- 遵循響應式流規範的兄弟項目Reactor;
- 支持異步I/O的Netty、Undertow等框架,以及基於Servlet 3.1+的容器(如Tomcat 8.0.23+和Jetty 9.0.4+);
- 支持響應式的數據訪問Spring Data Reactive Repositories;
- 支持響應式的安全訪問控制Spring Security Reactive;
- 等。
由於水平有限,如果文中有任何問題和不足,煩請您留言告知,不勝感激。