精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

新一代WebFlux框架核心技術Reactor響應式編程基本用法

開發 前端
Reactor中的Flux和Mono是響應式編程的核心組件,它們提供了豐富的操作符和方法來處理異步數據流。因此,對于使用WebFlux的開發者來說,掌握Reactor的使用是非常重要的。

環境:projectreactor2020.0.14

1. 前言

在響應式編程中,Project Reactor提供了兩個核心的概念:Mono和Flux。Mono和Flux都是Reactor中的Publisher,它們可以產生并發布數據,然后可以被訂閱和消費。這兩個概念在WebFlux中有著廣泛的應用,幫助我們實現異步和非阻塞的編程模型。

在這個主題中,我們將深入探討Mono和Flux的基本使用。我們將了解它們如何被創建,如何訂閱它們的事件,以及如何處理錯誤和完成通知。通過學習這些內容,你將能夠更好地理解WebFlux的響應式編程模型,并能夠在你的項目中有效地使用Mono和Flux。

讓我們開始吧!

2. 環境依賴

<dependency>
  <groupId>io.projectreactor</groupId>
  <artifactId>reactor-core</artifactId>
</dependency>
<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.projectreactor</groupId>
      <artifactId>reactor-bom</artifactId>
      <version>${reactor.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

3. Mono & Flux介紹

Flux

Flux表示了0到N個元素序列,下圖展示了Flux如何轉換元素

FluxFlux

一個Flux<T>是一個標準的Publisher<T>,它表示一個由0到N個發射項目組成的異步序列,可選地由一個完成信號或一個錯誤終止。在響應式流規范中,這三種類型的信號轉換為對下游訂閱者的onNext、onComplete和onError方法的調用。

由于可能信號的范圍很大,Flux是通用的反應式類型。請注意,所有事件,甚至是終止事件,都是可選的:只有onComplete事件才能表示一個空的有限序列,但刪除onComplete事件就會得到一個無限的空序列(沒什么用處,除了關于取消的測試)。類似地,無限序列不一定是空的。例如,Flux.interval(Duration)產生一個無限長的Flux<Long>,并從時鐘發出規則的時標。

Mono

Mono表示了0個或1個元素序列,下圖展示了Mono如何轉換元素

圖片圖片

Mono

Mono<T>是一個專門的發布者<T>,它通過onNext信號發出最多一個項目,然后以onComplete信號終止(Mono成功,有或沒有值),或只發出一個onError信號(Mono失敗)。

大多數Mono實現都希望在調用onNext之后立即對其訂閱者調用onComplete。Mono.never()是一個異常值:它不會發出任何信號,這在技術上并沒有被禁止,但在測試之外并不是特別有用。另一方面,onNext和onError的組合是明確禁止的。

Mono只提供了可用于` Flux `的操作符子集,有些操作符(特別是那些將Mono與另一個`Publisher`結合的操作符)會切換到`Flux`。例如,Mono#concatWith(Publisher)返回一個Flux,而Mono#then(Mono)返回另一個Mono。

注意,你可以使用Mono來表示只有完成概念的無值異步進程(類似于Runnable)。要創建一個,可以使用一個空的Mono<Void>。

4. Mono & Flux常用操作

Mono常用操作

  • 創建元素

Mono.just(T value)方法:創建一個包含指定值的Mono對象。

Mono.just(10).subscribe(System.out::println) ;

Mono.empty()方法:創建一個空的Mono對象,即不包含任何元素。

Mono.justOrEmpty(T value)方法:如果指定值不為null,則創建一個包含該值的Mono對象;否則創建一個空的Mono對象。

// 輸出10
Mono.justOrEmpty(10).subscribe(System.out::println) ;
// 如果值為null,沒有任何輸出
Mono.justOrEmpty(null).subscribe(System.out::println) ;

圖片圖片

Mono.fromCallable(Callable<? extends T> supplier)方法:創建一個Mono對象,該對象包含通過調用給定Callable對象的call()方法得到的返回值。

// 通過Callable方式,我們可以在內部執行其它一些動作
Mono.fromCallable(() -> 666).subscribe(System.out::println) ;

圖片圖片

Mono.fromSupplier(Supplier<? extends T> supplier)方法:創建一個Mono對象,該對象包含通過調用給定Supplier對象的get()方法得到的返回值。

Mono.fromSupplier(() -> 666).subscribe(System.out::println) ;

圖片圖片

Mono.fromFuture(CompletableFuture<? extends Integer> future)方法:創建一個Mono對象,該對象包含通過調用給定CompletableFuture對象

Mono.fromFuture(CompletableFuture.supplyAsync(() -> 666)).subscribe(System.out::println) ;

圖片圖片

  • 異常處理

下面這個示例完整的展示了當發生異常后的處理

public static Mono<Users> invoke(Mono<Users> user) {
  return user.flatMap(u -> {
    if ("admin".equals(u.getName())) {
      return Mono.error(new RuntimeException("越權")) ;
    }
    u.setName(u.getName() + " - ");
    return Mono.just(u) ;
  });
}


public static void main(String[] args) {
  invoke(Mono.just(new Users("admin")))
    .doOnNext(System.out::println)
    .doOnError(e -> {
      System.out.println(e.getMessage()) ;
    })
    // .onErrorResume(e -> Mono.just(new Users(e.getMessage() + " - fallback"))) // 功能更強,可以對捕獲的異常進行響應的處理,然后再返回一個值
    .onErrorReturn(new Users("return")) // 捕獲異常,簡單粗暴直接返回一個靜態值
    .doOnNext(System.out::println)
    .subscribe(); 


}
  • 執行結果
越權
Users [name=return]
  • 錯誤操作符

圖片圖片

  • 錯誤返回操作符

圖片圖片

  • 連接操作符

將該Mono的發射與提供的發布者連接(不交錯)。

Mono.just(10).concatWith(Mono.just(20)).subscribe(System.out::println) ;

圖片圖片

  • then操作符

該操作符是在當前Mono執行完成后切換到另外一個Mono。

Mono.just(10).doOnNext(System.out::println)
  .then(Mono.just(666)) // 切換到另外一個Mono通道, 忽略之前的Mono元素
  .doOnNext(System.out::println)
  .subscribe();

圖片圖片

Flux常用操作

  • 創建元素

just():直接使用元素創建Flux,即在創建Flux時拿到數據,之后有誰訂閱它,就重新發送數據給訂閱者。

Flux.just(1, 2, 3...)

圖片圖片

fromArray()、fromIterable()和fromStream():可以從數組、Iterable對象或Stream對象中創建Flux對象。

Flux.fromArray(new String[]{"1","2","3"});
Flux.fromIterable(List.of("a","b","c"));
Flux.fromStream(List.of("a","b","c").stream());

fromArray

圖片圖片

fromIterable

圖片圖片

fromStream

圖片

empty():創建一個不包含任何元素,只發布結束消息的序列。

圖片圖片

range(int start, int count):創建包含從start起始的count個數量的Integer對象的序列。

Flux.range(1, 10) ;

圖片圖片

  • 錯誤處理
Flux.error(new RuntimeException("錯誤")).onErrorResume(ex -> Mono.just("發生異常:" + ex.getMessage())).subscribe(System.out::println) ;

error操作符

圖片圖片

onErrorResume操作符

圖片圖片

  • when操作符將給定的Publisher<T>聚合成一個新的Mono,當所有給定的來源都完成時,這個Mono就會被滿足。錯誤將導致未執行的結果被取消,并立即向返回的Mono發送錯誤。
Flux.just(1, 3, 6).flatMap(id -> {
  Mono<Integer> query = Mono.fromSupplier(() -> {
    System.out.println("查詢數據...") ;
    return id * 10 ;
  }).delayElement(Duration.ofSeconds(2)) ;
  Mono<String> save = Mono.fromSupplier(() -> {
    System.out.println("保存數據...") ;
    return "success - " + id ;
  }) ;
  return Mono.when(query, save) ;
}).doOnComplete(() -> {
  System.out.println("執行完成...") ;
}).subscribe() ;

圖片圖片

  • filterWhen操作符
Flux.just(1,2,3,4,5,6).concatMap(item -> Mono.just(item).filterWhen(r -> {
  return Mono.just(r % 2 == 0) ;
})).subscribe(System.out::println) ;

圖片圖片

總之,Reactor中的Flux和Mono是響應式編程的核心組件,它們提供了豐富的操作符和方法來處理異步數據流。因此,對于使用WebFlux的開發者來說,掌握Reactor的使用是非常重要的。

完畢!!!

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2021-07-15 11:16:31

Spring WebWebFlux架構

2020-05-06 14:41:47

AIAI安全阿里安全

2013-05-03 09:49:38

ASICSDN可編程ASIC

2015-12-22 19:45:35

2009-09-02 16:10:40

ADSL技術

2017-10-19 16:21:02

SCM存儲技術

2009-06-25 17:14:59

JSF框架

2015-11-26 10:47:11

微軟開源DMTK

2015-06-30 10:00:44

Hyper虛擬化云計算

2023-06-30 07:50:59

響應式設計CSS

2023-04-12 18:36:20

IO框架內核

2022-08-22 08:05:17

Fresh框架Remix

2011-12-07 12:00:06

ibmdw

2010-01-06 15:50:05

軟交換技術

2021-10-28 14:53:27

鴻蒙HarmonyOS應用

2024-03-06 11:30:55

PowerScale戴爾科技

2024-09-03 08:14:34

2012-07-02 10:36:19

菲亞特

2022-03-10 16:01:29

Playwright開源
點贊
收藏

51CTO技術棧公眾號

阿v视频在线| 中文字幕第38页| 欧美高清电影在线| 麻豆国产精品官网| 欧美激情精品在线| 日本xxxxxxxxx18| 精品麻豆剧传媒av国产九九九| 亚洲国产另类av| 国产精品96久久久久久又黄又硬 | 处破女av一区二区| 精品国内亚洲在观看18黄| 日本一区二区黄色| 国产写真视频在线观看| 99re在线精品| 91精品国产自产在线| 久草国产精品视频| 亚洲香蕉av| 亚洲午夜女主播在线直播| 国产老头和老头xxxx×| 国产精品久久久久77777丨| 亚洲高清视频在线| 好色先生视频污| 国产精品无码2021在线观看| 波波电影院一区二区三区| 国产日韩在线看片| 亚洲欧美日韩激情| 国产日韩精品视频一区二区三区| 久久伊人色综合| 国产三级在线观看完整版| 777午夜精品电影免费看| 一区二区三区在线播| 2014亚洲精品| 亚洲图片中文字幕| 一二三区不卡| 中文字幕欧美视频在线| 中日韩精品一区二区三区| 超碰成人在线观看| 日韩欧美一二区| 国产毛片视频网站| 性xxxfreexxxx性欧美| 中文字幕一区二区三区在线观看| 色乱码一区二区三在线看| 中文字幕在线2019| 欧美精品一二三四| 国产成人亚洲精品无码h在线| a在线观看视频| 奇米影视在线99精品| 日本国产精品视频| 黄色片中文字幕| 欧美一级视频| 国产91色在线播放| 99re国产在线| 久久中文在线| 国产一区二区三区网站| 女人又爽又黄免费女仆| 中文成人在线| 91精品国产综合久久久久久久久久 | 天天射成人网| 欧美成人精品xxx| 免费在线观看国产精品| 黄页网站一区| 91精品国产高清久久久久久久久 | 宅男在线观看免费高清网站| 亚洲三级在线播放| 国产亚洲精品久久久久久久| 久久不射影院| 欧美日韩在线观看视频| 狠狠操精品视频| 国产综合av| 91.com视频| 成人啪啪18免费游戏链接| 粉嫩一区二区三区四区公司1| 日韩二区三区在线| 久久亚洲无码视频| 亚洲最大黄网| 久久久久久久一| 男人天堂av在线播放| 蜜臀国产一区二区三区在线播放| 亚洲va欧美va国产综合剧情| 韩国av电影在线观看| 玖玖国产精品视频| 国产日韩av在线播放| 精品久久国产视频| 91视频xxxx| 成人黄视频免费| 水莓100在线视频| 丁香花在线观看完整版电影| 999精品色在线播放| 久久综合色88| 久久久久久久极品| 美女一区二区久久| 国产精品视频一区二区三区经| 日韩av免费观影| 中文字幕日本不卡| 伊人成色综合网| 9999在线精品视频| 亚洲精品在线不卡| 91在线播放观看| 美女尤物久久精品| 亚洲最大福利视频网| 欧洲天堂在线观看| 一区二区三区四区亚洲| 另类小说第一页| 国产精品毛片视频| 久久精品精品电影网| 在线视频一区二区三区四区| 免费在线看一区| 蜜桃精品久久久久久久免费影院 | 国产一区二区电影在线观看| 欧美区在线播放| 中文字幕乱码人妻二区三区| caoporn国产精品| 欧洲美女和动交zoz0z| 亚洲a∨精品一区二区三区导航| 欧美zozozo| 91香蕉视频免费看| 国产精品嫩模av在线| 午夜欧美不卡精品aaaaa| 国产成人精品白浆久久69| 欧美经典一区二区| 欧美一区二区三区爽大粗免费| 蜜桃精品视频| 久久天天躁夜夜躁狠狠躁2022| 综合网在线观看| av在线不卡网| 欧美狂野激情性xxxx在线观| 欧洲大片精品免费永久看nba| 中文字幕亚洲精品| 91porny九色| 久久久亚洲精品石原莉奈| 久久精品国产sm调教网站演员| 精品视频在线一区| 久久福利视频网| 国产偷拍一区二区| 亚洲欧美另类图片小说| 亚洲va综合va国产va中文| 精品一区二区三| 伊人久久综合97精品| 国产精品男女视频| 久久综合九色综合欧美98| 鲁一鲁一鲁一鲁一澡| 鲁大师精品99久久久| 午夜精品久久久久久久白皮肤 | 欧美交换配乱吟粗大25p| 成人51免费| 欧美成人精品激情在线观看| 精品人妻一区二区三区蜜桃| 亚洲免费视频中文字幕| 日本黄色www| 激情视频一区| 精品无码久久久久国产| 亚洲校园激情春色| 国产香蕉97碰碰久久人人| 黄色一区二区视频| 中文字幕在线观看一区| 亚洲精品永久视频| 欧美电影免费网站| 欧美在线视频播放| 国产三级在线免费| 欧美日产国产精品| 青青草手机在线视频| 成人国产精品免费观看动漫| 青青草原av在线播放| 成人嫩草影院| 亚洲bt欧美bt日本bt| 美女91在线| 亚洲美女免费精品视频在线观看| 乱子伦一区二区三区| 国产精品久久久久天堂| 国产精品一二三视频| 免费黄网在线观看| 日韩欧美你懂的| 日韩精品无码一区二区| 91免费视频观看| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 天堂а√在线中文在线| 日韩av一区二区在线播放| www.成人在线| 亚洲少妇久久久| 韩国成人在线| 久久精品一偷一偷国产| 成人av激情人伦小说| 欧美一级欧美三级| 91av在线免费视频| 欧美激情一区二区三区在线| 日韩精品在线播放视频| 亚洲深夜福利| 一区二区三区久久网| 91亚洲无吗| 国产成人一区二区三区小说| 蜜桃一区二区三区在线| 国产日韩精品视频| 在线电影福利片| 亚洲精品视频二区| 91精品人妻一区二区三区果冻| 久久免费精品视频在这里| 成人在线小视频| 激情aⅴ欧美一区二区欲海潮| 夜夜嗨av一区二区三区四区| www.日韩高清| 欧洲生活片亚洲生活在线观看| 国产蜜臀av在线播放| 午夜精品影院在线观看| 成年人在线免费看片| 丁香六月综合激情| 在线观看日本一区二区| 99精品国产福利在线观看免费| 亚洲精品乱码久久久久久蜜桃91 | 中文高清一区| 中文字幕乱码一区二区三区| 日韩av网站在线免费观看| 91网站免费看| 国产激情欧美| 日韩av免费在线播放| www在线看| 久久久黄色av| 91在线网址| 亚洲免费中文字幕| 三级网站免费观看| 日韩午夜精品视频| 中文字幕乱码一区二区| 日韩欧美在线免费观看| 日本少妇bbwbbw精品| 一区二区三区波多野结衣在线观看| 欧美一区二区三区粗大| 国产欧美视频在线观看| 国产麻豆天美果冻无码视频| 最新国产精品| 亚洲一区二区三区免费观看| 国产va免费精品观看精品视频| 精品无码久久久久国产| 成人直播在线观看| 高清国产一区| 99久热这里只有精品视频免费观看| 91一区二区三区| 欧美另类中文字幕| 99国产在线| 2021年精品国产福利在线| 成人免费视频网| 国产精久久一区二区| 成人中文字幕在线观看| 欧一区二区三区| 超碰97人人人人人蜜桃| 岛国精品一区| 精品国产中文字幕| 亚洲综合福利| 日韩欧美精品一区二区三区经典| 精品国精品国产自在久国产应用| 日韩精品国内| 日韩一区亚洲二区| 91制片厂免费观看| 欧美激情1区2区3区| bt天堂新版中文在线地址| 日韩午夜高潮| 日本男人操女人| 免费欧美日韩国产三级电影| 午夜视频在线观| 国产69精品久久久久777| 五月天激情小说| 久久综合99re88久久爱| 亚洲精品天堂网| 亚洲欧美另类图片小说| 懂色av.com| 色一区在线观看| 中文字幕亚洲欧美日韩| 亚洲精品视频一区| 欧美亚韩一区二区三区| 日韩欧中文字幕| 一级视频在线播放| 精品人伦一区二区色婷婷| 天天射,天天干| 在线性视频日韩欧美| 怡红院红怡院欧美aⅴ怡春院| 国内精品久久久久久中文字幕| 欧美xx视频| 亚洲精品免费一区二区三区| 奇米影视777在线欧美电影观看| 亚洲高清视频一区| 欧美日韩免费| 国产一区二区视频免费在线观看| 精品亚洲成a人| 男女视频在线看| 国产乱人伦偷精品视频不卡| 欧美特级aaa| 成人永久免费视频| 久久久国产一级片| 亚洲成人激情av| 中文字幕在线观看国产| 亚洲精品一线二线三线| 国产粉嫩一区二区三区在线观看| 欧美成人午夜剧场免费观看| 美女一区网站| 成人高清在线观看| 欧美日韩激情| 国产毛片视频网站| 国产一区二区三区日韩 | 高潮一区二区| 91久久久亚洲精品| 精品国产一区二区三区小蝌蚪| 黄色激情在线视频| 麻豆91在线观看| www.久久av| 一区二区三区四区在线| 在线播放精品视频| 精品视频久久久久久| 伊人春色在线观看| 国产日产欧美a一级在线| 清纯唯美亚洲经典中文字幕| 精品一区二区成人免费视频 | 国产98在线| 性金发美女69hd大尺寸| 日韩国产在线不卡视频| 亚洲人成网站在线观看播放| 久久精品男女| 老熟妇精品一区二区三区| 一区二区免费视频| 国产精品无码免费播放| 91精品国产综合久久久久久| 国产高清视频在线播放| 欧美一二三视频| 国产精品欧美大片| 女人色极品影院| 国产一区二区三区av电影| 日韩精品久久久久久久的张开腿让| 日韩欧美在线中文字幕| 天天躁日日躁狠狠躁伊人| 欧美激情第6页| 欧洲大片精品免费永久看nba| 中文字幕一区二区三区乱码| 另类综合日韩欧美亚洲| 欧美人与禽zoz0善交| 欧美中文字幕久久| 国产网站在线播放| 国产精品黄色av| 韩日一区二区三区| 日本成人中文字幕在线| 日本一区二区三区在线不卡| 337p粉嫩色噜噜噜大肥臀| 亚洲新中文字幕| 在线看欧美视频| 一本一本久久a久久精品综合妖精| 久久精品国产99| 登山的目的在线| 91精品国产高清一区二区三区 | 2一3sex性hd| 亚洲mv在线观看| 日韩有码电影| 国产精国产精品| 成人在线免费小视频| 中文字幕第38页| 亚洲欧美另类在线| 亚洲国产综合网| 91福利视频网| 精品国产乱码久久久| 国产一级片自拍| 自拍偷拍亚洲激情| 亚洲av综合色区无码一区爱av| 久久久久久午夜| 思热99re视热频这里只精品| 日本www高清视频| 国产精品国产三级国产aⅴ入口| 国产精品熟女久久久久久| 久久久久久91| 国产剧情一区| 五月天激情播播| 亚洲香肠在线观看| 青梅竹马是消防员在线| 国产精品视频26uuu| 女主播福利一区| 熟女人妻在线视频| 欧美日韩一级视频| av蜜臀在线| 亚洲精品日韩成人| 国产91精品入口| 波多野结衣日韩| 九九视频直播综合网| 亚洲传媒在线| 中文字幕55页| 狠狠躁夜夜躁人人躁婷婷91| 最新97超碰在线| 国产成人免费电影| 日韩黄色免费网站| 欧美日韩大片在线观看| 亚洲乱码一区二区| 日韩免费成人| 能在线观看的av网站| 亚洲免费在线电影| 国产黄色在线播放| 国产成人精品日本亚洲11| 日韩精品一二三| 国产成人啪精品午夜在线观看| 中文字幕在线看视频国产欧美| 精品视频在线你懂得| 老司机午夜性大片| 色综合久久中文字幕综合网 | 色综合天天爱| 亚洲图片综合网| 91精品国产综合久久香蕉麻豆| 超级碰碰久久| 久久精品无码中文字幕|