近年來,響應式編程在開發者社區和客戶中很受歡迎,由於其以聲明的方式構建應用程序的能力,而不是強制,形成更加敏感和有彈性的應用。Spring 5 將反應系統納入其核心框架的事實已經顯示出向聲明式編程的範式轉變。
響應式編程管理數據生產者和消費者之間的異步數據流,它們需要以流暢的方式對數據進行響應。所以,響應式編程都是異步和事件驅動的流暢應用程序,需要少量的線程進行縮放。
響應式編程很難構建基於線程的架構,由於在基於共享可變狀態、線程和鎖的應用程序擴展過程中涉及到高度複雜性。
在響應式編程的上下文中,“在流中有數據時,所有事物都是流並以流暢方式行爲。”
爲什麼是響應式編程
高層次的抽象與響應式編程導致了代碼可讀性的提高,因此開發人員可以主要關注定義業務邏輯的事件的相互依存性。
在高度併發的環境中,響應模式自然地適合於消息處理,這是一個常見的企業用例。
由於執行反壓力的特性,響應式方法最適合控制生產者和消費者之間的流量,這將有助於避免內存不足。
對於一個或幾個線程,IO綁定任務可以通過異步和非阻塞方式執行,而且不阻塞當前線程。
在高交互和實時應用程序或任何操作/事件時,都可能觸發多個連接子系統的通知,在這種情況下響應式編程可以更有效的進行管理。
用於響應式編程實現的理想案例
•大量的交易處理服務,如銀行部門。
•大型在線購物應用程序的通知服務,如亞馬遜。
•股票價格同時變動的股票交易業務。
響應流 (Reactive Streams)
“響應流”定義一個 API 規範,其中包含一組最小的接口,這些接口公開了定義非阻塞反壓力的數據流的操作和實體的方法。
隨着反壓力的引入,響應流允許用戶控制來自出版商的數據交換速率。
響應流 API java.util.concurrent.flow 已正式成爲 java 9 的一部分。
響應流主要用作互操作層。
Spring 5 提供的響應式編程
Spring-Web-Reactive 模塊和 Spring MVC 都支持相同的 @Controller 編程,但 Spring-Web-Reactive 是在 Reactive 和非阻塞引擎上執行的。