Java 開發者的Reactive響應式世界 譯

    原文:https://dzone.com/articles/the-reactive-universe-for-java-devsjava

    想了解更多關於反應式編程的知識嗎?看看這篇關於反應式編程和Java開發人員的文章。react

    不能否認的是,在Dev(以及最近的OPS)領域出現的數以千計的創新中,最受討論的話題之一是響應式編程(ReactiveProgramming)。不管是新的FWS(框架)的開發,例如ReactiveX的Java語言(RxJava)的實現,Spring 5最近使用的響應式編程的啓動,仍是甚至lambdas和流在Java 8中的啓動(自2014年以來),很明顯,在咱們使用的代碼和FWS中出現了愈來愈多的響應式思惟。spring

    由於我是一個Java開發人員,因此我將嘗試在這裏評論一下Java開發人員今天在建立他們的應用程序時所依賴的主要選項。在平常編程的各類狀況下,這多是一個很好的選擇,永遠記住評估使用複雜或昂貴的資源來解決問題的真正須要是很重要的(著名的大炮打螞蟻)。然而,在對我爲響應式編程技術的工具發表評論以前,我想簡單地強調一下這個範例的著名支柱(根據「Reactive宣言」):編程

Elastic-對需求/負載的反應-應用程序可使用多個核心和多個服務器;服務器

Resilient-對故障的反應-應用程序對軟件、硬件和鏈接故障的反應和恢復;微信

Message Driven-事件驅動-而不是跨多個同步線程組合應用程序,系統由異步和非阻塞事件處理程序組成;併發

Responsive-響應用戶-應用程序提供豐富的,「實時」與用戶的互動。框架

    關於響應式編程模型,它們已經出現並獲得了改進,以解決阻塞API、高延遲和同步處理等問題。按照本文的目的,目前在使用Java的項目中進行的主要搜索和使用的工具以下:異步

RxJava

    儘管RxJava是Java社區著名的FW,但在我看來,RxJava仍然缺少Java Web開發人員的深刻使用和研究。時至今日,這種應用仍然只存在於Android應用程序開發中。jvm

    雖然RxJava沒有使用消息定向做爲FW的主要功能,好比Akka的參與者模型(下面我將對此進行論述),它提供了許多消息定向變得更加明顯的特性。最好的例子就是Rx的subjects,簡而言之,subjects 實現Publish / Subscrib 標準。

    在RxJava中,Subject同時表示一個觀察者和一個可觀察對象,容許將事件從一個源播到多個訂閱者。因爲負責發佈的組件不知道誰是消息的使用者,所以這個模型保證了應用程序組件之間的低耦合性。

    一些Web FWS還使用Rx做爲其實現的一部分,好比Vert.x,它實現了RxJava的可觀察性,而且實現了一個接近反應流的結構(No Vert.x2.x)。最後,這個實現的亮點之一是RxJava也很好地處理了流的背壓,容許開發人員(經過API中預約義的方法)決定如何處理被「阻塞」的流。

Akka    

    Akka是一個工具包和構建併發 Runtime,用於在JVM中構建併發的、分佈式的、容錯的、事件感知的應用程序。FW Akka能夠與Java和Scala一塊兒使用。Actors 是 Akka 的執行單位。參與者是抽象de ,它促進了同步、並行和分佈式系統的建立。參與者背後的關鍵原則是應用程序只經過消息與他交互,而從不直接與他交談。這種抽象容許基於角色的應用程序透明地擴展並保持低耦合級別。雖然這個FW不只被描述爲響應性的,它呈現了 reactive 解決方案的幾個特性(resilience 和 elasticity),並且即便最初是用Scala編寫的,它也很容易集成到Java中。除了RxJava和Vert.x(帶有reactive-streams),Akka還在其流中實現了背壓控制的概念,從而能夠更好地管理和處理流中的錯誤。

    Akka已經與java集成了一段時間,可是使用java 8(帶有lambdas和流)集成已經取得了更高效和更加一致的形式,如能夠看到的(雖然它是2014的,仍然有不少的內容能夠查到!)

Reactor Project

    該項目由一系列功能組成,這些功能容許使用fw spring 5在jvm中使用 reactive streams。該項目基於另外一個已存在的項目,稱爲 Reactor Cor ,該項目容許關鍵改進並插入在spring 5中啓動的功能。不少人已經利用了最初的設計,容許您用簡化的方式編寫高性能、可伸縮和容錯代碼。這都與java開發人員已經從spring中使用的許多特性結合起來。

    Reactor project 由兩種主要類型組成:Mono <T>以及Flux <T>.二者都被視爲數據流,最多爲1(Mono)或更多(Flux)元素,並經過 Publisher —>Subscriber 模式流來工做。 Spring 5 已經發布,並列出了新的 reactive 特性,並討論了這一點。

    在今天的市場上,我相信這些是最實用和最著名的選項(有活躍的社區和全面的文檔)來處理java語言中reactive programming 的概念。若是你有任何建議或一些用例來評論,我會更想知道!下次見。

 

    有什麼討論的內容,能夠加我微信公衆號:

相關文章
相關標籤/搜索