日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

Reactive Streams规范及常见库

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

一、什么是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是個規(guī)范,它規(guī)范了“有非阻塞背壓機(jī)制的異步的流處理”。實際上Reactive Streams規(guī)范或者說它的第三方代碼實現(xiàn)包含的內(nèi)容更加豐富:除了non-blocking,還有:Composable、Deferred、Flow、Controll、Resilient、Interruptible。

其中Composable就是函數(shù)式編程思想的用武之地。 可體會下Java8里的Stream API各種算子的參數(shù),所以Lamda表達(dá)式是進(jìn)行Reactive Streams實現(xiàn)的基本前提,否則很難想象臃腫的面向?qū)ο蟮腃omposable。有了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.

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

二、為什么要有 Reactive Streams

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

三、為什么要用 Reactive

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

四、Java 世界里知名的 Reactive 庫

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

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

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

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

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

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

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

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

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

    • Stephane 是實現(xiàn)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
  • 文章轉(zhuǎn)自

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。