日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Java反應(yīng)式框架Reactor中的Mono和Flux

瀏覽:29日期:2022-08-08 17:37:52

Java反應(yīng)式框架Reactor中的Mono和Flux

1. 前言

最近寫關(guān)于響應(yīng)式編程的東西有點(diǎn)多,很多同學(xué)反映對Flux和Mono這兩個(gè)Reactor中的概念有點(diǎn)懵逼。但是目前Java響應(yīng)式編程中我們對這兩個(gè)對象的接觸又最多,諸如Spring WebFlux、RSocket、R2DBC。我開始也對這兩個(gè)對象頭疼,所以今天我們就簡單來探討一下它們。

2. 響應(yīng)流的特點(diǎn)

要搞清楚這兩個(gè)概念,必須說一下響應(yīng)流規(guī)范。它是響應(yīng)式編程的基石。他具有以下特點(diǎn):

響應(yīng)流必須是無阻塞的。響應(yīng)流必須是一個(gè)數(shù)據(jù)流。它必須可以異步執(zhí)行。并且它也應(yīng)該能夠處理背壓。

背壓是反應(yīng)流中的一個(gè)重要概念,可以理解為,生產(chǎn)者可以感受到消費(fèi)者反饋的消費(fèi)壓力,并根據(jù)壓力進(jìn)行動(dòng)態(tài)調(diào)整生產(chǎn)速率。形象點(diǎn)可以按照下面理解:

Java反應(yīng)式框架Reactor中的Mono和Flux

3. Publisher

由于響應(yīng)流的特點(diǎn),我們不能再返回一個(gè)簡單的POJO對象來表示結(jié)果了。必須返回一個(gè)類似Java中的Future的概念,在有結(jié)果可用時(shí)通知消費(fèi)者進(jìn)行消費(fèi)響應(yīng)。

Reactive Stream規(guī)范中這種被定義為Publisher<T> ,Publisher<T>是一個(gè)可以提供0-N個(gè)序列元素的提供者,并根據(jù)其訂閱者Subscriber<? super T>的需求推送元素。一個(gè)Publisher<T>可以支持多個(gè)訂閱者,并可以根據(jù)訂閱者的邏輯進(jìn)行推送序列元素。下面這個(gè)Excel計(jì)算就能說明一些Publisher<T>的特點(diǎn)。

Java反應(yīng)式框架Reactor中的Mono和Flux

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

而Flux和Mono都是Publisher<T>在Reactor 3實(shí)現(xiàn)。Publisher<T>提供了subscribe方法,允許消費(fèi)者在有結(jié)果可用時(shí)進(jìn)行消費(fèi)。如果沒有消費(fèi)者Publisher<T>不會(huì)做任何事情,他根據(jù)消費(fèi)情況進(jìn)行響應(yīng)。 Publisher<T>可能返回零或者多個(gè),甚至可能是無限的,為了更加清晰表示期待的結(jié)果就引入了兩個(gè)實(shí)現(xiàn)模型Mono和Flux。

4. Flux

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

Java反應(yīng)式框架Reactor中的Mono和Flux

以上的的講解對于初次接觸反應(yīng)式編程的依然是難以理解的,所以這里有一個(gè)循序漸進(jìn)的理解過程。

有些類比并不是很妥當(dāng),但是對于你循序漸進(jìn)的理解這些新概念還是有幫助的。

傳統(tǒng)數(shù)據(jù)處理

我們在平常是這么寫的:

public List<ClientUser> allUsers() { return Arrays.asList(new ClientUser('felord.cn', 'reactive'), new ClientUser('Felordcn', 'Reactor'));}

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

流式數(shù)據(jù)處理

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

public Stream<ClientUser> allUsers() { return Stream.of(new ClientUser('felord.cn', 'reactive'), new ClientUser('Felordcn', 'Reactor'));}

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

反應(yīng)式數(shù)據(jù)處理

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

public Flux<ClientUser> allUsers(){ return Flux.just(new ClientUser('felord.cn', 'reactive'), new ClientUser('Felordcn', 'Reactor'));}

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

5. Mono

Mono 是一個(gè)發(fā)出(emit)0-1個(gè)元素的Publisher<T>,可以被onComplete信號(hào)或者onError信號(hào)所終止。

Java反應(yīng)式框架Reactor中的Mono和Flux

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

傳統(tǒng)數(shù)據(jù)處理

public ClientUser currentUser () { return isAuthenticated ? new ClientUser('felord.cn', 'reactive') : null;}

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

Optional的處理方式

public Optional<ClientUser> currentUser () { return isAuthenticated ? Optional.of(new ClientUser('felord.cn', 'reactive')) : Optional.empty();}

這個(gè)Optional我覺得就有反應(yīng)式的那種味兒了,當(dāng)然它并不是反應(yīng)式。當(dāng)我們不從返回值Optional取其中具體的對象時(shí),我們不清楚里面到底有沒有,但是Optional是一定客觀存在的,不會(huì)出現(xiàn)NPE問題。

反應(yīng)式數(shù)據(jù)處理

public Mono<ClientUser> currentUser () { return isAuthenticated ? Mono.just(new ClientUser('felord.cn', 'reactive')) : Mono.empty();}

和Optional有點(diǎn)類似的機(jī)制,當(dāng)然Mono不是為了解決NPE問題的,它是為了處理響應(yīng)流中單個(gè)值(也可能是Void)而存在的。

6. 總結(jié)

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

到此這篇關(guān)于Java反應(yīng)式框架Reactor中的Mono和Flux的文章就介紹到這了,更多相關(guān)Java框架 Reactor中的Mono和Flux內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美精品导航| 蜜桃成人精品| 99在线精品免费视频九九视| 久久精品不卡| 亚洲国产一区二区三区在线播放| 免费视频亚洲| 亚洲成人三区| 亚洲精品永久免费视频| 日韩av有码| 日韩高清中文字幕一区二区| 亚洲综合电影| 欧美精品九九| 蜜桃av一区| 亚洲资源网站| 日本亚洲视频在线| 国产精品分类| 成人在线视频中文字幕| 日韩欧美精品综合| 不卡一区综合视频| 亚洲在线免费| 日本中文字幕不卡| 久久国产麻豆精品| 欧美激情网址| 极品av在线| 国产一区亚洲| 亚洲人www| 国产激情久久| 久久精品主播| 亚洲专区视频| 久久精品国产一区二区| 人人香蕉久久| 日韩在线播放一区二区| 国产一卡不卡| 播放一区二区| 亚洲免费专区| 精品99久久| 欧美特黄a级高清免费大片a级| 日韩视频在线一区二区三区| 亚洲欧洲日韩| 精品一区二区男人吃奶| 久久免费黄色| 亚洲精品一二| 日本成人在线一区| 在线精品亚洲欧美日韩国产| 97精品久久| 色偷偷色偷偷色偷偷在线视频| 午夜久久中文| 蜜桃视频欧美| 日韩久久一区二区三区| 亚洲一二三区视频| 精品国产aⅴ| 午夜欧美精品久久久久久久| 一区二区国产在线观看| 国产精品日本一区二区三区在线 | 免费不卡在线视频| 久久不见久久见中文字幕免费 | 国产调教一区二区三区| 亚洲1234区| 欧美在线91| 欧美日韩在线播放视频| 日本aⅴ免费视频一区二区三区| 伊人久久大香线蕉av不卡| 午夜日韩在线| 国产精品久久久久久久久久久久久久久 | 精品五月天堂| 麻豆91精品| 91精品韩国| 欧美日本久久| 久久先锋影音| 麻豆视频久久| 日韩精品一二三区| 精品久久久中文字幕| 国产手机视频一区二区| 久久中文在线| 综合激情网...| 天堂资源在线亚洲| 精品国产亚洲一区二区三区大结局| 久久国产66| 亚洲黄色中文字幕| 国产精品探花在线观看| 丝袜脚交一区二区| 久久九九99| 日韩av在线中文字幕| 日韩和欧美一区二区三区| 久久久久久久久99精品大| 国产精品色在线网站| 国产亚洲精品v| 国产精品精品| 国产九一精品| 日韩和欧美一区二区| 亚洲视频综合| 日本一不卡视频| 久久国产精品99国产| 国产精品成人自拍| 亚洲乱码久久| 日韩视频中文| 久久久久久美女精品| 精品三级av在线导航| 日本视频一区二区| 首页国产欧美日韩丝袜| 欧美福利专区| 国产成人精品一区二区三区视频 | 国产精品久久久久77777丨| 视频在线观看一区| 国产中文一区| 群体交乱之放荡娇妻一区二区| 韩国一区二区三区视频| 国产九一精品| 国产人成精品一区二区三| 亚洲免费一区三区| 一区二区三区四区日韩| 亚洲深夜影院| 蘑菇福利视频一区播放| 日韩在线精品| 日韩激情一区| 蜜桃精品在线| 久久久精品五月天| 999视频精品| 欧美在线日韩| 美女福利一区二区三区| 国产精品一区二区免费福利视频| 六月丁香综合| 国产一区二区三区日韩精品 | 亚洲毛片在线免费| 日韩中文字幕无砖| av资源亚洲| 久草精品视频| 日韩久久一区二区三区| 精品视频网站| 在线亚洲精品| 在线看片不卡| 欧美精品一卡| 日韩精品一二三区| 亚洲3区在线| 日韩av一区二区三区四区| 日韩中文字幕麻豆| 亚洲aa在线| 国产精品欧美在线观看| 欧美黄页在线免费观看| 国产盗摄——sm在线视频| 亚洲伊人精品酒店| 欧美一级网站| 日韩福利视频导航| 久久av免费| 吉吉日韩欧美| 91超碰国产精品| 一区二区三区国产盗摄| 国产精品一站二站| 国产理论在线| 婷婷综合网站| 免费观看久久久4p| 91国内精品| 在线手机中文字幕| 午夜欧美精品| 日本午夜精品一区二区三区电影| 国产精品mm| 成人羞羞视频在线看网址| 久久久水蜜桃av免费网站| 久久亚洲一区| 国产精品欧美在线观看| 在线观看精品| 蜜臀久久99精品久久久久久9| 日韩在线黄色| 电影91久久久| 亚洲欧美日韩视频二区| 国产精品亚洲片在线播放| 高清av不卡| 麻豆精品91| 免费亚洲一区| 国产中文一区| 日本色综合中文字幕| 日韩精品2区| 免费精品视频最新在线| 久久精品国产999大香线蕉| 一区二区三区四区在线看| 日韩精品一页| av资源中文在线| 蜜桃av一区二区三区电影| 国产精品成人一区二区网站软件| 亚洲特色特黄| 国产精品一国产精品| 免费av一区二区三区四区| 久久精品超碰| 日本亚洲视频在线| 国产成人精品999在线观看| sm久久捆绑调教精品一区| 欧美国产小视频| 一区二区三区四区精品视频| 精品国产不卡一区二区| 亚洲婷婷免费| 免费高潮视频95在线观看网站| 香蕉久久国产| 日本va欧美va欧美va精品| 国产综合婷婷| 精品五月天堂| 久久av在线| 日本综合视频| 亚洲日本三级| 亚洲精品福利| 日韩va亚洲va欧美va久久|