上一篇介紹了Java原生提供的api,這一篇開始介紹其他Reactive Programming的工具。
如果你是一名Android的開發者,你應該早早就聽過RxJava,是ReactiveXJava的簡稱,一個適用於JVM的Reactive Extensions實作,擴充了觀察者模式(observer pattern)來支援序列化資料或事件的操作。ReactiveX在各式語言都有推出實作,除了RxJava
與好朋友RxAndroid
之外,RxJs
、RxSwift
,各大語言幾乎都有支援,對於Reactive Programming的推廣功不可沒。
這篇主要介紹的Reactor是pivotal推出,一樣也是Reactive Streams Specification
實作,他與RxJava有許多相似的地方,如果你是一名後端的開發者,熟悉各種spring framework,這樣選擇Reactor來進入Reactive世界是一個很好的選擇,如果舞台在Android,那你最好的選擇是RxJava。若選擇了Reactor,首先需要介紹Mono
與Flux
,這是在Reactor中的兩種概念,之前介紹過在Reactive stream中有Publisher
& Subscriber
,而其中Mono
&Flux
就是Publisher
的實作。
一個非同步的序列代表0-N個元素。下面這是官網關於FLUX的圖,附上簡單的說明。
Flux
從左到右的時間線。Flux
發出的元素。Flux
做的一些轉換。Flux
代表轉換的結果。從最熟悉的List,到不需要在意細節Functional的Stream,再到Reactive 非阻斷的Flux
,概念上相似,就是代表多個元素,只是額外多了一些特性。
Mono是一個專門發射(emit)一個元素或0個的publisher
。
Mono
的時間線。Mono
發射出的一個Optional元素Mono
做的一些轉換。Mono
代表轉換的結果。從最早期回傳物件或是null再到使用Optional來避免NPE最後到現在的Mono,都是類似的概念。
今天介紹了兩個在Reactor中最基礎的publisher
,下一篇就來看看如何使用。