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

前言

上一篇介绍了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,下一篇就来看看如何使用。

资料来源


<<:  EP 13: Add/Edit the MockData in TopStore App

>>:  第21天 - 来试着做一个简易购物系统(5),统计购物车价格

如果你真的够渴望做点什麽,任何事情你都可以持续做三十天。

如果你真的够渴望做点什麽,任何事情你都可以持续做三十天。 If you really want so...

企划实现(2)

常常有人说创业需要勇气,但绝非这麽简单,创业不只需要勇气还需要运气、人脉、执着 人脉 相信不用说很多...

Day 16 AWS云端实作起手式第六弹 串接两大网路流量导流服务Route53和ELB

今天我们会把Route 53串接到昨天建置的ELB上。但开始之前,我们先问自己一个问题,Route ...

Security 是什麽酷东西啊

本篇要介绍的是读者在大四上学期所修的一门课,也因为这门课的关系我才开始接触网路安全以及 AIS3,如...

Day 22 - Memorized Hook: useMemo

...> 如果有错误,欢迎留言指教~ Q_Q 没写完啦 useMemo 回传一个 memoi...