国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

我對響應式編程中Mono和Flux的理解

開發 后端
很多同學反映對響應式編程中的Flux和Mono這兩個Reactor中的概念有點懵逼。但是目前Java響應式編程中我們對這兩個對象的接觸又最多,諸如Spring WebFlux、RSocket、R2DBC。

[[339894]]

1. 前言

很多同學反映對響應式編程中的Flux和Mono這兩個Reactor中的概念有點懵逼。但是目前Java響應式編程中我們對這兩個對象的接觸又最多,諸如Spring WebFlux、RSocket、R2DBC。我開始也對這兩個對象頭疼,所以今天我們就簡單來探討一下它們。

2. 響應流的特點

要搞清楚這兩個概念,必須說一下響應流規范。它是響應式編程的基石。他具有以下特點:

  • 響應流必須是無阻塞的。
  • 響應流必須是一個數據流。
  • 它必須可以異步執行。
  • 并且它也應該能夠處理背壓。

背壓是反應流中的一個重要概念,可以理解為,生產者可以感受到消費者反饋的消費壓力,并根據壓力進行動態調整生產速率。形象點可以按照下面理解:

[[339895]]

有沒有背壓的兩種情形

 

3. Publisher

由于響應流的特點,我們不能再返回一個簡單的POJO對象來表示結果了。必須返回一個類似Java中的Future的概念,在有結果可用時通知消費者進行消費響應。

Reactive Stream規范中這種被定義為Publisher ,Publisher是一個可以提供 0-N 個序列元素的提供者,并根據其訂閱者Subscriber的需求推送元素。一個Publisher可以支持多個訂閱者,并可以根據訂閱者的邏輯進行推送序列元素。下面這個Excel計算就能說明一些Publisher的特點。

 

A1-A9就可以看做Publisher及其提供的元素序列。A10-A13分別是求和函數SUM(A1:A9)、平均函數AVERAGE(A1:A9)、最大值函數MAX(A1:A9)、最小值函數MIN(A1:A9),可以看作訂閱者Subscriber。假如說我們沒有A10-A13,那么A1-A9就沒有實際意義,它們并不產生計算。這也是響應式的一個重要特點:當沒有訂閱時發布者什么也不做。

而Flux和Mono都是Publisher在Reactor 3實現。Publisher提供了subscribe方法,允許消費者在有結果可用時進行消費。如果沒有消費者Publisher不會做任何事情,他根據消費情況進行響應。Publisher可能返回零或者多個,甚至可能是無限的,為了更加清晰表示期待的結果就引入了兩個實現模型Mono和Flux。

4. Flux

Flux是一個發出(emit)0-N個元素組成的異步序列的Publisher,可以被onComplete信號或者onError信號所終止。在響應流規范中存在三種給下游消費者調用的方法 onNext, onComplete, 和onError。下面這張圖表示了 Flux 的抽象模型:

Flux

 

以上的的講解對于初次接觸反應式編程的依然是難以理解的,所以這里有一個循序漸進的理解過程。

有些類比并不是很妥當,但是對于你循序漸進的理解這些新概念還是有幫助的。

傳統數據處理

我們在平常是這么寫的:

  1. public List<ClientUser> allUsers() { 
  2.     return Arrays.asList(new ClientUser("felord.cn""reactive"), 
  3.             new ClientUser("Felordcn""Reactor")); 

我們通過迭代返回值List來get這些元素進行再處理(消費),這種方式有點類似廚師做了很多菜,吃不吃在于食客。需要食客主動去來吃就行了(pull的方式),至于喜歡吃什么不喜歡吃什么自己隨意,怎么吃也自己隨意。

流式數據處理

在Java 8中我們可以改寫為流的表示:

  1. public Stream<ClientUser> allUsers() { 
  2.     return  Stream.of(new ClientUser("felord.cn""reactive"), 
  3.             new ClientUser("Felordcn""Reactor")); 

依然是廚師做了很多菜,但是這種就更加高級了一些,提供了菜品的搭配方式(不包含具體細節),食客可以按照說明根據自己的習慣搭配著去吃,一但開始概不退換,吃完為止,過期不候。

反應式數據處理

在Reactor中我們又可以改寫為Flux表示:

  1. public Flux<ClientUser> allUsers(){ 
  2.     return Flux.just(new ClientUser("felord.cn""reactive"), 
  3.             new ClientUser("Felordcn""Reactor")); 

這時候食客只需要訂餐就行了,做好了自然就呈上來,而且可以隨時根據食客的飯量進行調整。如果沒有食客訂餐那么廚師就什么都不用做。當然不止有這么點特性,不過對于方便我們理解來說這就夠了。

5. Mono

Mono 是一個發出(emit)0-1個元素的Publisher,可以被onComplete信號或者onError信號所終止。

Mono

 

這里就不翻譯了,整體和Flux差不多,只不過這里只會發出 0-1 個元素。也就是說不是有就是沒有。象Flux一樣,我們來看看Mono的演化過程以幫助理解。

傳統數據處理

  1. public ClientUser currentUser () { 
  2.     return isAuthenticated ? new ClientUser("felord.cn""reactive") : null

直接返回符合條件的對象或者null。

Optional 的處理方式

  1. public Optional<ClientUser> currentUser () { 
  2.     return isAuthenticated ? Optional.of(new ClientUser("felord.cn""reactive")) 
  3.             : Optional.empty(); 

這個Optional我覺得就有反應式的那種味兒了,當然它并不是反應式。當我們不從返回值Optional取其中具體的對象時,我們不清楚里面到底有沒有,但是Optional是一定客觀存在的,不會出現NPE問題。

反應式數據處理

  1. public Mono<ClientUser> currentUser () { 
  2.     return isAuthenticated ? Mono.just(new ClientUser("felord.cn""reactive")) 
  3.             : Mono.empty(); 

和Optional有點類似的機制,當然Mono不是為了解決NPE問題的,它是為了處理響應流中單個值(也可能是Void)而存在的。

 

6. 總結

Flux和Mono是Java反應式中的重要概念,但是很多同學包括我在開始都難以理解它們。這其實是規定了兩種流式范式,這種范式讓數據具有一些新的特性,比如基于發布訂閱的事件驅動,異步流、背壓等等。另外數據是推送(Push)給消費者的以區別于平時我們的拉(Pull)模式。同時我們可以像Stream Api一樣使用類似map、flatmap等操作符(operator)來操作它們。對Flux和Mono這兩個概念需要花一些時間去理解它們,不能操之過急。

本文轉載自微信公眾號「碼農小胖哥」,可以通過以下二維碼關注。轉載本文請聯系碼農小胖哥公眾號。

 

責任編輯:武曉燕 來源: 碼農小胖哥
相關推薦

2021-07-28 20:13:04

響應式編程

2022-03-09 23:02:30

Java編程處理模型

2024-09-02 16:10:19

vue2前端

2022-01-04 20:52:50

函數異步Promise

2022-08-25 11:00:19

編程系統

2023-11-27 07:42:27

Reactor響應式

2025-05-06 01:14:00

系統編程響應式

2013-07-11 10:37:20

Java內存模型

2017-05-24 10:12:54

前端FlexboxCSS3

2022-07-06 08:30:36

vuereactvdom

2011-03-22 09:49:15

JavaScript

2019-12-26 09:15:44

網絡IOLinux

2012-09-21 09:21:44

函數式編程函數式語言編程

2022-07-15 08:16:56

Stream函數式編程

2019-07-01 13:34:22

vue系統數據

2021-07-14 13:12:51

2017-06-02 09:47:29

網絡分層協議

2017-03-22 11:22:04

JavaScript函數式編程

2013-06-27 09:31:37

聲明式編程命令式編程編程

2022-06-16 13:08:30

Combine響應式編程訂閱
點贊
收藏

51CTO技術棧公眾號

911久久香蕉国产线看观看| 黄色片在线播放| 四虎永久精品在线| 天涯成人国产亚洲精品一区av| 色综合视频二区偷拍在线| 快播电影网址老女人久久| 在线看日韩精品电影| 日韩亚洲欧美视频| 国产精品久久久久蜜臀| 日韩中文字幕国产精品| 欧美激情二区| 欧美视频免费在线| av在线天天| k8久久久一区二区三区| 亚洲一区二区三区免费看| 欧美激情1区| 国产精品亚洲精品| 丁香5月婷婷久久| 久久久成人精品视频| 桃色一区二区| 免费欧美在线视频| 九色一区二区| 欧美一区视频| 亚洲一区二区三区在线视频| 国产精品一区2区3区| 精品国产一区二区三区忘忧草| 在线性视频日韩欧美| 91嫩草国产线观看亚洲一区二区| 国产精品美女999| 久久99精品一区二区三区| 桃花色综合影院| 91日韩在线视频| 国产午夜亚洲精品理论片色戒| 黄色av电影在线观看| 日韩av电影在线播放| 99精品视频一区| 福利在线导航136| 国产精品久久国产三级国电话系列| 国产调教视频一区| 日韩精品毛片| 国产精品久久久久久久久久尿| 美女视频黄久久| 深夜福利免费在线观看| 丝袜美腿亚洲一区二区| 久久久久久久高潮| 暖暖视频在线免费观看| 欧美精品18videos性欧美| 美女视频黄频大全不卡视频在线播放 | 国产在线三区| 亚洲淫片在线视频| 亚洲黄色小视频| 国产九九在线观看| 欧美日韩精品一区二区三区| 日韩中文字幕在线一区| 亚洲精品一区二| 欧美在线观看视频一区二区| 在线日韩成人| 欧美精品一区二区性色a+v| 福利视频导航一区| 日韩精品亚洲专区在线观看| 五月天久久狠狠| 91福利精品第一导航| 林ゆな中文字幕一区二区| 欧美这里只有精品| 亚洲激情成人网| 国产精品av一区二区| 中文字幕在线永久在线视频| 久久久99免费视频| 国产成人亚洲精品狼色在线| 在线观看的网站你懂的| 国产精品亚洲综合| 日韩欧美中文字幕在线播放| 亚洲欧美网站在线观看| 国产精品视频在线播放| 亚洲品质自拍视频网站| 国产一区二区三区电影在线观看| 欧美mv日韩mv国产| 精品欧美激情精品一区| 性感美女久久精品| 亚洲国产sm捆绑调教视频| 亚洲福利视频一区二区| 欧美视频一区二区三区…| 欧美日韩亚洲综合| 亚洲欧美国产精品| 黑人巨大精品欧美一区二区三区 | 亚洲美女精品久久| 在线亚洲男人天堂| 精品日韩99亚洲| 性欧美疯狂xxxxbbbb| 中文字幕综合在线| 一个色妞综合视频在线观看| 欧美激情综合网| 亚洲日本护士毛茸茸| 亚洲一区二区三区免费视频| 精品久久久久久久久久| 欧美亚男人的天堂| 亚洲精品在线三区| 最新日韩中文字幕| 日韩av电影手机在线观看| 日韩美女av在线免费观看| 国产一区欧美二区三区| 国内视频一区二区| 波多野结衣乳巨码无在线| 国产性一级片| 2024最新电影免费在线观看| 人人鲁人人莫人人爱精品| caoporn成人免费视频在线| 国产一区观看| 91免费精品国自产拍在线不卡| 亚洲444eee在线观看| 日韩av综合网站| 日本成人黄色片| 午夜精品区一区二区三| 四色永久网址| 筱崎爱全乳无删减在线观看| 精品国产123区| 国产不卡视频在线观看| 一本大道av伊人久久综合| 国产一区二区欧美日韩| 国产精品视频网站| 免费av手机在线观看| 日本在线免费播放| 欧美成人一区在线观看| 日本欧美一区二区三区乱码| 亚洲成国产人片在线观看| 精品国产欧美一区二区三区成人 | 国产丝袜一区二区三区| 国产精品久久久久免费a∨| 亚洲精品乱码久久久久久自慰| 伊人222成人综合网| 亚洲精品在线观看91| 中文字幕av一区二区三区免费看| 亚洲国产精久久久久久久| 国产91精品一区二区绿帽| 亚洲三级电影网站| 国产成人免费视| 日韩中文字幕网| 天堂网在线免费观看| 91精品国产乱码久久久竹菊| 久久久91精品国产一区二区三区| 久久久久久91| 激情小说激情视频| 深爱激情久久| 一区二区国产盗摄色噜噜| 成人黄色午夜影院| 69av亚洲| 99热这里只有精品8| 欧美一级夜夜爽| 一本一本久久a久久精品综合妖精| 日本不卡网站| 福利一区福利二区| 欧美高清一级大片| 久久白虎精品| 韩国欧美国产1区| 北条麻妃久久精品| caoporen人人| 亚洲视频福利| 日韩精品免费在线视频| 亚洲最大综合网| 亚洲视频成人| 欧美中文字幕在线| 日韩成人影音| 欧美在线观看18| av网站免费观看| 91丨九色丨蝌蚪富婆spa| 欧美国产二区| 亚洲制服欧美另类| 69av亚洲| 99re在线精品| 国产mv久久久| av大片在线观看| 久久网站热最新地址| 国产精品成人在线| 黄色免费网站在线观看| 91美女片黄在线| 国产精品日韩欧美一区二区| 九九精品调教| 午夜视频久久久久久| 欧美美女黄色网| 999精品色在线播放| 欧美精品久久99久久在免费线| 91免费视频网站在线观看| 日韩欧美综合| 久久人人爽亚洲精品天堂| 亚洲一区在线日韩在线深爱| 国产一二精品视频| 3d蒂法精品啪啪一区二区免费| 婷婷激情一区| 欧美日韩中文在线观看| 久激情内射婷内射蜜桃| 一区精品久久| 国产精品444| 91成人app| 亚洲精品www久久久| 三级黄视频在线观看| 国产精品视频第一区| 亚洲区成人777777精品| 国产欧美日韩一级| 99久久99久久| 日韩国产一区二区三区|