Java開發人員的反應程式設計介紹 - Fernando Almeida

banq發表於2019-02-07

不可否認的是,在Dev(和Ops最近)領域出現的數千項創新中,討論最多的主題之一是反應式程式設計。新的FW框架不斷推出,例如ReactiveX(RxJava)的Java語言的實現,最近推出的帶有反應式程式設計的Spring 5,甚至是Java 8中的lambdas和流的推出(自2014年起),很明顯,越來越多的反應性思維正在我們使用的程式碼和FW中出現。
由於我是Java Dev,我將嘗試在此處評論Java開發人員今天所依賴的主要選項以便建立他們的應用程式。在日常程式設計的各種情況下,這可能是一個很好的選擇,將複雜或昂貴的資源用來解決真正的問題是很重要的(著名的殺戮大炮)。但是,在對各種工具進行評論之前,我想簡要介紹一下這種正規化的著名支柱(根據Reactive Manifesto):
  • 可伸縮性Elastic  - 對需求/負載做出反應 - 應用程式可以使用多個核心和多個伺服器;
  • 彈性Resilient  - 對故障做出反應 - 應用程式對軟體,硬體和連線故障做出反應並從中恢復;
  • 訊息驅動 - 事件驅動 - 系統由非同步和非阻塞事件處理程式組成,而不是跨多個同步執行緒組合應用程式;
  • 響應性 -對使用者做出反應- 為使用者提供豐富的“實時”互動的應用程式。

關於反應式程式設計模型,它們已經出現並得到改進,以解決稱為阻塞API,高延遲和同步處理等問題。根據本文的目的,目前,使用Java的專案中的主要搜尋和使用包括以下工具:

RxJava
儘管作為Java社群的著名FW,在我看來,RxJava仍然缺乏Java Web開發人員的深入使用和研究。今天,僅在Android應用程式開發中仍然存在使用。
雖然RxJava不使用訊息方向例如Akka actor模型(我將在下面評論)作為FW的主要功能,,但它提供了許多功能,其中訊息方向變得更加明顯。最好的例子是Rx的主題。簡而言之,主題實現了釋出/訂閱標準。
在RxJava中,主題Subject同時表示Observer和Observable,允許將事件從單個源多播到多個訂閱者。由於負責釋出的元件不知道誰將成為訊息的消費者,因此該模型保證了應用程式元件之間的低耦合。
一些Web FW也使用Rx作為其實現的一部分,如Vert.x,它實現了RxJava的Observable,並且還實現了接近Reactive-Streams的結構(No Vert.x 2.x)。最後,這個實現的一個亮點是RxJava還可以很好地處理流的背壓,允許開發人員(透過API中的預定義方法)決定如何處理“阻塞”的流。

Akka
Akka是一個工具包和執行時,用於在JVM中構建併發,分散式,容錯,事件感知應用程式。FW Akka可以與Java和Scala一起使用。演員Actor是阿卡的執行單位。actor是一種抽象,有助於建立同步,並行和分散式系統。演員背後的關鍵原則是應用程式僅透過訊息與他互動,而不會直接與他交談。這種抽象允許基於actor的應用程式透明地擴充套件並保持低耦合級別。雖然這個FW不僅具有反應性,但它​​具有反應性解決方案的幾個特徵(如彈性和彈性),即使最初用Scala編寫,它也很容易與Java整合。除了RxJava和Vert.x(帶有反應流),
Akka已經與Java整合了一段時間,但是使用Java 8(帶有lambda和流),整合已經採用了更高效和更一致的形式。


Reactor Project
該專案包含一系列功能,允許使用FW Spring 5在JVM中處理活動流。該專案基於另一個名為Reactor Cor的預先存在的專案,該專案允許Pivotal改進並插入在Spring 5中啟動的那些功能。利用原始設計,允許您以簡化的方式編寫高效能,可擴充套件和容錯的程式碼。這一切都與Java開發人員已經從Spring使用的許多功能相結合。
Reactor專案由兩種主要型別構建,Mono <T>和Flux <T>。兩者都被視為資料流,最多1個(單Mono )或更多(Flux)元素,並透過支援釋出者→流的訂閱者模式來工作。Spring 5已經發布,這裡列出並討論了新的反應功能。


在今天的市場中,我認為這些是最實用和眾所周知的選項(具有活躍的社群和全面的文件),可以使用Java語言中的反應式程式設計概念。

相關文章