反應式 Spring

工程 | Rossen Stoyanchev | 2016 年 2 月 09 日 | ...

在 SpringOne2GX 2015 上,Juergen 宣布了 Spring Framework 5 的計畫,重點放在反應式架構上。具體的努力已經在進行中,而且自那時以來發生了很多事情!

在最基本的層面上,反應式程式設計模型允許編寫非阻塞服務和應用程式。 這需要從編寫命令式邏輯到異步、非阻塞、函數式風格程式碼的根本轉變,特別是在與外部資源互動時。

反應式網路應用程式

大多數 Java 網路應用程式都建立在 Servlet API 之上,該 API 最初是使用同步和阻塞語義建立的。 多年來,增加了對異步請求 (Servlet 3.0) 和非阻塞 I/O (Servlet 3.1) 的支援。 在 Spring MVC 中,我們發現將選擇性的異步 HTTP 請求處理添加到現有應用程式是可行的。 但是,我們也發現很難在現有的網路框架和應用程式生態系統中引入非阻塞 I/O。 這樣做需要在核心合約中進行非常深入的更改,這些合約需要從阻塞切換到異步語義。

Spring MVC 持續流行的原因之一是其直觀、基於註釋的程式設計模型,該模型基於靈活的控制器方法簽章。 幸運的是,相同的內容可以繼續作為反應式網路應用程式的基礎。 這是 Spring Reactive 努力的方向,您將在其中找到一個TestController,它看起來像任何 Spring MVC 控制器,但在一個新的反應式引擎上執行,並針對 Tomcat、Jetty、Undertow 和 Netty 進行整合測試。 請注意,該專案將在 5 月發布 4.3 版本後不久合併到 Spring Framework master 分支中,以準備在 6 月發布 5.0 M1 版本。

反應式基礎

這項工作的一個關鍵要素是 Reactive Streams 規範,其目的是提供 “具有非阻塞反壓的異步流處理標準”。 該規範可在不同的異步元件供應商之間實現互操作性:從 HTTP 伺服器到網路框架、資料庫驅動程式等。它將作為 java.util.concurrent.Flow 包含在 JDK 9 中。

該規範很小,由 4 個介面、一些規則和一個 TCK 組成。 然而,要將其公開為 API,需要圍繞它建立基礎設施來組合異步邏輯。 Spring Reactive 使用 Reactor Core,這是一個小型且專注的函式庫,可用作想要在 Reactive Streams 上構建的函式庫和框架的基礎。 對於那些可能熟悉 Project Reactor 的人來說,在過去 6-8 個月中發生了很多事情,導致了本週 Reactor Core 2.5 M1 的發布,Stephane Maldini 將很快提供完整的更新。

請繼續關注來自不同 Spring 專案關於反應式程式設計的更多部落格文章。 此外,請期待今年在巴塞隆納美麗的城市舉辦的 Spring I/O 會議上的一些反應式熱潮!

取得 Spring 電子報

隨時關注 Spring 電子報

訂閱

領先一步

VMware 提供培訓和認證,以加速您的進度。

了解更多

取得支援

Tanzu Spring 在一個簡單的訂閱中提供 OpenJDK™、Spring 和 Apache Tomcat® 的支援和二進位檔案。

了解更多

即將舉行的活動

查看 Spring 社群中所有即將舉行的活動。

檢視全部