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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Reactive Streams规范及常见库

發布時間:2025/3/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Reactive Streams规范及常见库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、什么是Reactive Streams

Reactive Streams is an initiative to provide a standard for asynchronous stream processing with non-blocking back pressure. This encompasses efforts aimed at runtime environments (JVM and JavaScript) as well as network protocols.

概括的說,Reactive Streams是個規范,它規范了“有非阻塞背壓機制的異步的流處理”。實際上Reactive Streams規范或者說它的第三方代碼實現包含的內容更加豐富:除了non-blocking,還有:Composable、Deferred、Flow、Controll、Resilient、Interruptible。

其中Composable就是函數式編程思想的用武之地。 可體會下Java8里的Stream API各種算子的參數,所以Lamda表達式是進行Reactive Streams實現的基本前提,否則很難想象臃腫的面向對象的Composable。有了JDK8的鋪墊,Reactive Streams接口被JDK9定義在Flow里才是可能的。

As of August 23rd, 2019 we have released version 1.0.3 of Reactive Streams for the JVM, including Java API, a textual Specification, a TCK and implementation examples.

這個規范由三部分組成:Java API(org.reactive-streams)、以文字描述的規范、技術兼容工具包。Reactive Streams 規范 僅限于 Java(JavaScript、網絡協議)世界,其它語言雖然也有 Reactive 這樣的工具(參考這里:ReactiveX)實現,但好像沒有類似的規范。

二、為什么要有 Reactive Streams

因為很多廠商開發了 reactive 庫,但是它們直接很難/不可能互操作。用 Reactive Streams 進行規范就使得它們可以互操作,也就讓它們串起來形成一個 reactive 鏈成為了可能。

三、為什么要用 Reactive

因為 reactive 可以榨干 CPU…,所以從老板的角度講是省錢、從環保的角度講是省電、從碼農的角度講是有意思。

四、Java 世界里知名的 Reactive 庫

  • RxJava
  • 從 Reactive 宣言、到 Reactive Streams 規范,再到各種 Reactive 庫是很自然的一個脈絡。但現實是大家先有了 Reactive 系統的思想,聰明的程序開發出各種蘊含著 reactive 思想的庫(比如 RxJava 1.0)。為了各個庫之間的統一性、可操作性,大家一起協商出了 Reactive Streams 規范。繼而這些已經存在的 reactive 庫便改進自己的 API 設計,向 reactive streams 規范靠攏并提供各種轉化 api 讓用戶在原生 api 和 reactive streams 接口直接轉換。比如 RxJava 2.0 的 Flowable 就直接繼承自 org.reactive-streams.Publisher 并提供了 toObservable() toFlowable()。因為各個庫的實現細節不同,用到具體轉換 api 需要參考其手冊。

    RxJava雖然是java ractive編程的領路人,并且RxJava跟Project Reactor 3.0 基本是等價的。但是考慮到Spring生態的強大,估計其前途不會太光明了。

  • JDK1.9 (Flow)
  • 這個規范被的 API 形式定義從 JDK 9 這個版本開始,以 java.util.concurrent.Flow 靜態子類的形式被定義。其實,既然已經有了 org.reactive-streams 這樣的規范,為什么還要在 JDK 中弄出個 Flow 來再重新定義一次。難道就是要宣示 JDK 自身有支持 reactive streams 的東西?這個思路的本意應該就像 JDBC 接口一樣,讓 Flow 里定義的接口成為 SPI,讓不同供應商的 reactive sreams 可互操作吧。所以 JDK 里的 Flow 中定義的東西不能算是庫,而是個 SPI:Service Provider Interface。

  • Vert.x、MongoDB 響應式流驅動
  • 這些都做了改進以符合 org.reactive-streams 中的 API 定義。其中Vert.x不僅提供了對 java 的 reactive 庫,還有 JavaScritp、Ruby、Scala 等。

  • Spring 的 Project Reactor
  • https://projectreactor.io/docs/core/release/reference/

    • 既然 Spring 都提供了對 Reactive Streams 的實現,感覺其實上面列出的幾個庫已經沒有太多的意義。各家對Reactive Streams規范的實現在細節上都有很大不同,因為Spring 的生態太強大了,如果沒有特殊的需求,比如 JDK 小于 8,那么我們的項目基本于 Project Reactor,那么應該是較好的選擇。這個網頁 https://tech.io/playgrounds/929/reactive-programming-with-reactor-3/Intro 可以幫助操練 Reactor Api。

    • Project Reactor 到目前為止經歷了 1.0, 2.0, 3.3。其中 1.0 這個階段還沒有 Reactive Stream 是規范。在 2.0 開始 follow 規范并基本定型。3.0 感覺是個重構版,形成 reactive-streams-commons 庫。這里是 3.0 的 release 文檔: https://github.com/reactor/reactor-core/releases?after=v3.0.0.RELEASE

    • 有了 Project Reactor 這樣的基礎庫,整個 Spring 組件基本都有了 Reactive Style 的版本,在這個基礎上用 Netty(或 Servet 3.1 Containe)+ Reactive Streams 適配層 + Spring Security Reactive + WebFlux + Spring Data Reactive Repository,就可以構建出重頭到尾的 Reactive 應用。

    • 從 Spring Cloud 的組件角度講,也衍生出 Reactive Discovery Client, Reactive Load Balancer, Blockhound, Reactor Debug, Improved Reactor Micrometer Support, Reactor Netty Metric …

    • Stephane 是實現Project Reactor的主力,下面是他的兩個視頻鏈接:
      https://www.youtube.com/watch?v=Tr04KiJdAXQ
      https://www.youtube.com/watch?v=zls8ZLry68M

  • Akka
    Akka Stream:https://doc.akka.io/docs/akka/current/stream/stream-introduction.html
  • 文章轉自

    總結

    以上是生活随笔為你收集整理的Reactive Streams规范及常见库的全部內容,希望文章能夠幫你解決所遇到的問題。

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