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

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

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

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

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

1. 前言

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

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

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

響應(yīng)流必須是無(wú)阻塞的。響應(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è)簡(jiǎn)單的POJO對(duì)象來(lái)表示結(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ì)算就能說(shuō)明一些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。假如說(shuō)我們沒(méi)有A10-A13,那么A1-A9就沒(méi)有實(shí)際意義,它們并不產(chǎn)生計(jì)算。這也是響應(yīng)式的一個(gè)重要特點(diǎn):當(dāng)沒(méi)有訂閱時(shí)發(fā)布者什么也不做。

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

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

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

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

我們?cè)谄匠J沁@么寫(xiě)的:

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

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

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

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

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

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

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

在Reactor中我們又可以改寫(xiě)為Flux表示:

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

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

5. Mono

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

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

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

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

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

直接返回符合條件的對(duì)象或者null。

Optional的處理方式

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

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

反應(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問(wèn)題的,它是為了處理響應(yīng)流中單個(gè)值(也可能是Void)而存在的。

6. 總結(jié)

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

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

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品少妇一区| 91欧美日韩在线| 国产精品网站在线看| 人人爱人人干婷婷丁香亚洲| 亚洲精品一二| 久久婷婷一区| 亚洲国产一区二区三区在线播放| 国产视频久久| 国产欧美高清| 久久字幕精品一区| 亚洲一本视频| 69堂精品视频在线播放| 国产精品精品| 先锋亚洲精品| 精品一二三区| 午夜亚洲一区| 亚洲国产成人精品女人| 99久久亚洲精品蜜臀| 视频一区在线视频| 视频一区二区中文字幕| 在线视频亚洲欧美中文| 日韩一区二区免费看| 国产欧美日韩一区二区三区四区 | 亚洲精品黄色| 日韩精品久久久久久| 国产欧美69| 免费污视频在线一区| 日本在线啊啊| 男人操女人的视频在线观看欧美| 日本视频中文字幕一区二区三区| 国产精品美女久久久久久不卡| 国产精选久久| 99久精品视频在线观看视频| av不卡免费看| 欧美精品不卡| 亚洲一级少妇| 欧美日韩亚洲国产精品| 精品国产精品久久一区免费式| 国产成年精品| 日韩精品一级二级 | 97se综合| 日本三级亚洲精品| 天堂资源在线亚洲| 国产精久久久| 日韩一区二区三区免费视频| 六月婷婷综合| 国产日韩欧美在线播放不卡| 成年男女免费视频网站不卡| 视频一区视频二区中文| 国产欧美二区| 日韩中文欧美在线| 丝袜av一区| 国产精品草草| 国产偷自视频区视频一区二区| 欧美亚洲自偷自偷| 香蕉成人久久| 99pao成人国产永久免费视频| 国产日韩电影| 精品一区二区三区亚洲| 日韩国产在线不卡视频| 亚洲专区欧美专区| 亚洲婷婷免费| 精品欧美一区二区三区在线观看| 欧美综合社区国产| 美女网站一区| 精精国产xxxx视频在线播放| 精品视频高潮| 免费在线亚洲欧美| 亚洲精一区二区三区| 亚洲精品97| 99视频+国产日韩欧美| 欧美精品一区二区久久| 欧美一区二区三区高清视频| 日本高清不卡一区二区三区视频| 国产伦精品一区二区三区在线播放 | 91成人超碰| 一区二区高清| 精品久久电影| 久久香蕉精品| 蜜臀av性久久久久蜜臀aⅴ四虎 | 久久只有精品| 日韩精品a在线观看91| 久久中文字幕av| 欧美日一区二区在线观看| 午夜性色一区二区三区免费视频| 影音先锋久久| 在线综合亚洲| 女人天堂亚洲aⅴ在线观看| 美女视频黄 久久| 国产精品亚洲成在人线| 综合一区av| 欧美亚洲三区| 青青在线精品| 国户精品久久久久久久久久久不卡 | 日韩精品永久网址| 国产精品日本一区二区不卡视频| 国产精品久久久久久久久久白浆 | 欧美激情另类| 欧美三级网址| 在线人成日本视频| 另类综合日韩欧美亚洲| 超碰在线99| www.com.cn成人| 欧洲av一区二区| 亚洲二区精品| 亚洲综合丁香| 美女视频黄 久久| 精品在线网站观看| 99视频在线精品国自产拍免费观看| 99pao成人国产永久免费视频| 亚洲一区成人| 精品香蕉视频| 亚洲精品一区二区妖精| 午夜在线一区二区| 国产精品手机在线播放| 国产精品av久久久久久麻豆网| 日韩午夜黄色| 日韩精品五月天| 婷婷综合激情| 欧美日韩亚洲一区三区| 91视频精品| 蜜桃一区二区三区在线观看| 热久久国产精品| 日韩精品永久网址| 日韩精品成人在线观看| 精品亚洲精品| 亚洲欧美日韩国产一区二区| 国产精品扒开腿做爽爽爽软件| 亚洲神马久久| 精品黄色一级片| 欧美永久精品| 91成人网在线观看| 久久国产66| 国产精品99久久免费| 九一精品国产| 99精品网站| 福利一区二区| 婷婷成人av| 欧美日韩国产一区二区三区不卡 | 久久久亚洲一区| 精品一区二区三区中文字幕 | 中文字幕日本一区| 人在线成免费视频| 国产精品密蕾丝视频下载| 亚洲狼人精品一区二区三区| 日本黄色精品| 香蕉久久一区| 玖玖玖国产精品| 国产一区日韩| 日韩黄色av| 视频一区欧美精品| 日韩中文字幕亚洲一区二区va在线| 欧美日韩视频免费观看| 91嫩草亚洲精品| 日韩精品免费视频一区二区三区| 亚洲一区网站| 亚洲成人日韩| 婷婷综合激情| 欧美成人亚洲| 久久国产日本精品| 国产欧美自拍| 国产欧美日韩在线观看视频| 国产精品嫩草影院在线看| 欧美日韩一区二区三区在线电影| 欧美中文一区二区| 久久精品官网| 另类av一区二区| 久久国产免费看| 国产精品玖玖玖在线资源| 欧美日韩国产观看视频| 91亚洲国产| 秋霞影视一区二区三区| 欧美1级日本1级| 久久精品123| 欧美日韩国产传媒| 青青国产91久久久久久| 精品视频高潮| 亚洲综合电影一区二区三区| 日本成人在线视频网站| 四虎成人av| 亚洲精品乱码| 欧美激情91| 日韩精品欧美| 亚州国产精品| 日韩电影免费网站| 欧美日韩日本国产亚洲在线| 综合欧美亚洲| 精品色999| 亚洲欧美网站| 国精品产品一区| 久久国产毛片| 日本精品一区二区三区在线观看视频 | 欧美日韩xxxx| 亚洲在线久久| 99精品电影| 国产福利资源一区| 2023国产精品久久久精品双| 日韩av在线播放网址| 国产一区 二区| 欧美精品福利|