iT邦幫忙

2021 iThome 鐵人賽

DAY 7
0
Software Development

從零開始Reactive Programming- Spring系列 第 8

[Day 7] Reactive Programming - Reactor(FLUX & MONO) Part 1

  • 分享至 

  • xImage
  •  

前言

上一篇介紹了Java原生提供的api,這一篇開始介紹其他Reactive Programming的工具。

RxJava

如果你是一名Android的開發者,你應該早早就聽過RxJava,是ReactiveXJava的簡稱,一個適用於JVM的Reactive Extensions實作,擴充了觀察者模式(observer pattern)來支援序列化資料或事件的操作。ReactiveX在各式語言都有推出實作,除了RxJava與好朋友RxAndroid之外,RxJsRxSwift,各大語言幾乎都有支援,對於Reactive Programming的推廣功不可沒。
https://ithelp.ithome.com.tw/upload/images/20210921/201414185Y5ooBkuXs.png

Reactor

這篇主要介紹的Reactor是pivotal推出,一樣也是Reactive Streams Specification實作,他與RxJava有許多相似的地方,如果你是一名後端的開發者,熟悉各種spring framework,這樣選擇Reactor來進入Reactive世界是一個很好的選擇,如果舞台在Android,那你最好的選擇是RxJava。若選擇了Reactor,首先需要介紹MonoFlux,這是在Reactor中的兩種概念,之前介紹過在Reactive stream中有Publisher& Subscriber,而其中Mono&Flux就是Publisher的實作。
https://ithelp.ithome.com.tw/upload/images/20210921/20141418zSzwrdSsWu.png

Flux

一個非同步的序列代表0-N個元素。下面這是官網關於FLUX的圖,附上簡單的說明。
https://ithelp.ithome.com.tw/upload/images/20210921/20141418qk3FIadn88.png

  1. 這是一個代表Flux從左到右的時間線。
  2. 一個一個圓點代表Flux發出的元素。
  3. 時間線上的垂直線代表成功的結束。
  4. 虛線與長方形代表針對Flux做的一些轉換。
  5. 長方形裡面的文字代表轉化的實際操作。
  6. 下方的Flux代表轉換的結果。
  7. 如果因為某些原因被中斷了,用一個X表示錯誤而不是正常的垂直線。

從最熟悉的List,到不需要在意細節Functional的Stream,再到Reactive 非阻斷的Flux,概念上相似,就是代表多個元素,只是額外多了一些特性。
https://ithelp.ithome.com.tw/upload/images/20210921/2014141801KIfAI2gb.png

Mono

Mono是一個專門發射(emit)一個元素或0個的publisher
https://ithelp.ithome.com.tw/upload/images/20210921/20141418kgCMCwrm6z.png

  1. 從左到右代表Mono的時間線。
  2. 圓點是Mono發射出的一個Optional元素
  3. 時間線上的垂直線代表成功的結束。
  4. 虛線與長方形代表針對Mono做的一些轉換。
  5. 長方形裡面的文字代表轉化的實際操作。
  6. 下方的Mono代表轉換的結果。
  7. 如果因為某些原因被中斷了,用一個X表示錯誤而不是正常的垂直線。

從最早期回傳物件或是null再到使用Optional來避免NPE最後到現在的Mono,都是類似的概念。
https://ithelp.ithome.com.tw/upload/images/20210921/20141418tBP1LdJt5p.png

結語

今天介紹了兩個在Reactor中最基礎的publisher,下一篇就來看看如何使用。

資料來源


上一篇
[Day 6] Reactive Programming - Java 9(SubmissionPublisher、Processor)
下一篇
[Day 8] Reactive Programming - Reactor(FLUX & MONO) Part 2
系列文
從零開始Reactive Programming- Spring32
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言