日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述

發布時間:2023/12/3 java 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如今,人們需要具有高用戶體驗的高響應性,交互式應用程序,這通常意味著處理異步性,尤其是當這些應用程序涉及高負載,實時數據和多用戶時。

由于Java是一種固有的支持命令式編程風格的面向對象語言,因此異步性是一個很麻煩的問題,它可能會使代碼變成完全的地獄。 解決異步問題的一種可能方法是在編碼級別( 反應性編程 )或設計和體系結構級別(反應性系統)引入“反應性”。

讓我們遍歷最流行的框架和工具包,以了解我們今天有哪些選擇可以在Java中進行反應以及它們之間的差異(如果有的話)。 但是,從“反應”上下文中刷新一些基本術語開始是一個好主意。

1.快速梳理“反應性”

Reactive Streams規范于2015年出現,旨在為具有無阻塞背壓的異步流處理提供標準,以確保反應庫的互操作性。 該計劃沒有引入任何新內容,而是匯集了一組規則和協議,這些規則和協議簡化并標準化了多種工具之間的“反應性”。 它引入了四個核心接口( 發布者 , 訂閱者 , 訂閱和處理器 )。 發布者產生一系列事件并將其定向到訂閱者 。 訂閱服務器從發布 服務器接收數據并產生副作用。 訂閱是發布者與訂閱者之間的連接。 處理器包括發布者和訂閱者協議。

非阻塞環境意味著永遠不會浪費線程以等待其他操作完成。

背壓是一種“重要的反饋機制” ,可用于管理情況,即數據的生成速度快于接收方消耗數據的速度。 它使數據生產者有可能保持正確的步伐,并且在高負載下不會失敗。

消息驅動和事件驅動的方法。 使用消息驅動的方法,生產者可以準確地知道他向誰發送消息,而事件驅動的方法意味著接收者只是訂閱數據生產者,它保留了所有訂戶的列表,并在有任何訂戶的情況下通知他們狀態改變。

2. Java反應式編程

有兩種最常用于在Java應用程序中實現反應式編碼的框架: RxJavaSpring Reactor

RxJava第一個完整的 Java 反應工具 。 在遙遠的2009年,Erik Meijer通過Reactive Extensions引入了這種新的編程風格,將其作為一組Microsoft庫實現,用于通過默認使用.NET 4.0的可觀察序列來創建異步和事件驅動的程序。 很快,Rx.NET贏得了開發人員的熱愛,并且全世界看到了其他實現:RxJava(2014年11月),RxSwift,RxScala,RxJS,Rx.Kotlin等。RxJava2.0從零開始重新編寫了Reactive Streams規范,并添加了新的類型。數據生產者介紹。

2013年,世界上第一次看到Spring Reactor 。它與RxJava非常相似,并且代表Spring 5的API實現。盡管兩者有很多共同點,但是這兩個框架之間還是存在一些差異。 讓我們使用下面的圖表快速探索它們。

? RxJava的 彈簧反應堆

第四代圖書館

最新版本,至2018年 2017年6月21日-RxJava 2.1.1。 2017年11月16日– Reactor Core 3.1.2。
環境 反應性X Spring5
Java版本 Java 6(Java和適用于Android的Java) Java 8

默認情況下單線程非阻塞

事件驅動

支持反應流 部分支持反應式流* 完全支持反應式流
數據產生者的類型 RxJava 1 –可觀察

RxJava 2 –可觀察(多個值),可流動(多個值,支持背壓),單個(一個值或錯誤),可能(一個值,錯誤或無排放),可完成(完成并帶有錯誤或成功)

控制器:

通量表示0-n值和Mono的異步序列-0-1值的異步序列(均支持背壓)

運營商數量 超過100名運營商** 一組核心運營商

* RxJava只有Flowables作為Publisher的真實體現。 其余數據生產者(即Single,Maybe,Observable,Completable)不支持背壓。

** RxJava和Reactor都允許應用到操作員的沉浸式功能(地圖,zip,過濾器等)來轉換和修改主流。 大理石圖極大地說明了操作員( 在此處查找一些娛樂內容)。 它們不屬于最初的反應式編程理論,看起來像函數式編程的一部分。 操作員極大地簡化了代碼編寫,因為它們代表了轉換數據流的便捷方法,而在“常規” Java中,開發人員必須耐心地編寫計算機將執行的每個步驟。 另一方面,操作員允許將具有特定功能的大量步驟融合在一起,這使代碼更加清晰,精簡和易于理解。 此外,操作員彼此兼容 。

3. Java反應系統

反應性系統代表了“反應性”的下一個層次。 AkkaVert.x是通常用于構建這些系統的框架,這些框架最常被實現為反應微服務 。 在IT世界中,這個新術語從字面上意味著微服務架構和反應系統原理的結合。 “反應性”的獲得對于這些分布式系統來說是完美的,這使它們更加靈活,可靠,并提高了性能。

Lightbend于2009年7月推出Akka (最新版本:2018年1月11日-Akka 2.5.9)。 該工具包最初是用Scala編寫的,但如今也可以在Java中使用。 Akka是開源的,并支持Reactive Streams規范。 該工具包的目的是將Erlang平臺的高可用性和可伸縮性引入JVM。

演員模型是Akka的基礎。 參與者是獨立的代碼集,它們通過消息相互通信。 演員的郵箱接收消息,并通過單個控制線程使消息入隊。

此外,Akka在演員樹層次結構中脫穎而出-演員組織的一種特殊形式,它暗示著不同級別的演員之間存在父子關系,從而確保了特定的容錯能力和自我恢復能力。 父角色負責處理子塊:當父角色收到有關子項崩潰的通知時,它可以繼續,重新啟動,停止其子進程或自行停止,以將錯誤處理的責任轉移到下一級。 由于演員代表完全孤立的單位并且不共享任何可變狀態,因此其中一個的突然停止不會影響其他演員,他們將能夠照常繼續工作。

Vert.x的第一個版本是2012年(最新版本:2018年2月13日– Vert.x 3.5.1)。 Vert.x是一個開源工具包,其背后的力量是Node.js。 Vert.x支持Reactive Streams,并提供垂直而非角色。 與Akka不同,Vert.x是一個完全由事件驅動的環境,并以簡單的請求-響應方式進行通信。 消息被發送到EventBus,以便通過單個控制線程排隊。 Vert.x是一個多語言版本,可輕松與任何JVM或非JVM語言配合使用。

Akka(在ActorRef的幫助下)和Vert.x(在Service Proxies的幫助下)都簡化了對分布式系統的遠程調用。 由于它們的組件通過類似于URL的ActorRef / Service Proxies進行通信,因此沒有理由關心它是否是本地電話。

外賣:

  • Akka是一組具有良好知識庫的成熟庫,這意味著執行它的時間和精力更少。
  • x比Akka還要年輕,因此它不那么受歡迎,而且描述也不那么好。
  • Vert,x是一個多語言版本,因此在開發過程中結合不同語言時更加方便。
  • Akka參與者形成一個樹形層次結構,可以對高負載和故障進行優雅的管理。
  • Akka是消息驅動的,這使其組件(演員)之間的耦合更加松散。

4.最后一點

在本文中,我們快速回顧了Java世界中使用的“反應式”框架和工具包。 他們不斷獲得關注,并證明“反應性”不僅是一個過度夸大的概念,而且還是在編碼和體系結構級別上進行Java應用程序開發的一種可行方法。

Java開發人員可以在反應性上下文中選擇彼此非常相似的各種角色,盡管它們也保留一些獨特的功能。 好消息是它們都支持Reactive Streams標準,從而使它們可以互操作。 因此,開發人員可以選擇適合自己特定需求的內容,也可以針對自己的應用盡力而為。

翻譯自: https://www.javacodegeeks.com/2018/08/frameworks-toolkits-make-java-reactive-rxjava-spring-reactor-akka-vert-x-overview.html

總結

以上是生活随笔為你收集整理的使Java具有响应性的框架和工具包:RxJava,Spring Reactor,Akka和Vert.x概述的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。