日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mono 的创建

發布時間:2023/12/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mono 的创建 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 前言
  • 一、響應式數據流
  • 二、Mono的創建


前言

????????Reactor 是一個基于 JVM 之上的異步應用基礎庫。為 Java 、Groovy 和其他 JVM 語言提供了構建基于事件和數據驅動應用的抽象庫,可用它構建時效性流式數據應用,實現應用高效、異步地傳遞消息。
????????Reactor 性能相當高,在最新的硬件平臺上,使用無堵塞分發器每秒鐘可處理 1500 萬事件。
????????Reactor 中的兩個重要的概念是Flux 和 Mono。Mono 表示包含 0 或者 1 個元素的異步序列。Flux 表示包含 0 到 N 個元素的異步序列。他們包含三種不同類型的消息通知:正常的包含元素的消息、序列結束的消息和序列出錯的消息。

一、響應式數據流

????????響應式數據流 作為一種新的數據流規范應用于 Java 9 及其后續版本,旨在提供同/異步數據序列流式控制機制。

1、響應式數據流接口

org.reactivestreams.Pubslisher:數據流發布者(信號從 0 到 N,N 可為無窮)。提供兩個可選終端事件:錯誤和完成。
org.reactivestreams.Subscriber:數據流消費者(信號從 0 到 N,N 可為無窮)。消費者初始化過程中,會請求生產者當前需要訂閱多少數據。其他情況,通過接口回調與數據生產方交互: 下一條(新消息)和狀態。狀態包括:完成/錯誤,可選。
org.reactivestreams.Subscription:初始化階段將一個小追蹤器傳遞給訂閱者。它控制著我們準備好來消費多少數據,以及我們想要什么時候停止消費(取消)。
org.reactivestreams.Processor:同時作為發布者和訂閱者的組件的標記。

2、響應式數據流發布協議

訂閱者有兩種方式向發布者請求數據:

無界的:訂閱者只需要調用 Subscription#request(Long.MAX_VALUE) 即可。
有界的:訂閱者保留數據引用,調用request(long) 方法消費。

二、Mono的創建

(1)empty

不包含任何元素,可以發布結束消息

@Testpublic void empty(){Mono.empty().subscribe(System.out::println);}

(2)just

包含指定元素

@Testpublic void just(){Mono.just("hello mono").subscribe(System.out::println);}

(3)justOrEmpty

有元素時相當于just,
沒有元素時相當于empty,
元素是Optional時,則根據Optional里是否有值來創建just或empty。

@Testpublic void justOrEmpty(){Mono.justOrEmpty("hello mono").subscribe(System.out::println);}

(4)never

不包含任何元素

@Testpublic void never(){Mono.never().subscribe(System.out::println);}

(5)from

@Testpublic void from() {//從 Publisher 生成 MonoMono.from(Mono.just("hello mono")).subscribe(System.out::println);//從 Publisher 生成 Mono,會對Flux類型進行包裝Mono.fromDirect(Mono.just("hello mono")).subscribe(System.out::println);//從 Supplier 生成 MonoMono.fromSupplier(() -> "hello mono").subscribe(System.out::println);//從 Runnable 生成 MonoMono.fromRunnable(() -> System.out.println("hello mono")).subscribe(System.out::println);//從 Callable 生成 MonoMono.fromCallable(() ->"hello mono").subscribe(System.out::println);//從 CompletableFuture 生成 MonoMono.fromFuture(CompletableFuture.completedFuture("hello mono")).subscribe(System.out::println);//從 CompletionStage 生成 MonoMono.fromCompletionStage(CompletableFuture.completedFuture("hello mono")).subscribe(System.out::println);//從 Supplier<? extends CompletionStage<? extends T> 生成 MonoMono.fromCompletionStage(() -> CompletableFuture.completedFuture("hello mono")).subscribe(System.out::println);}

(6)defer

@Testpublic void defer() {//從 Supplier 獲取 monoMono.defer(() -> Mono.just("hello mono")).subscribe(System.out::println);//從 Function<ContextView, ? extends Mono<? extends T>> 獲取 monoMono.deferContextual(view -> Mono.just("hello mono")).subscribe(System.out::println);}

(7)delay

@Testpublic void delay() throws InterruptedException {//指定延時時間,發布值是0Mono.delay(Duration.of(5, ChronoUnit.SECONDS)).subscribe(System.out::println);Mono.delay(Duration.of(5, ChronoUnit.SECONDS), Schedulers.parallel()).subscribe(System.out::println);TimeUnit.SECONDS.sleep(15);}

(8)error

@Testpublic void error() throws InterruptedException {//包含異常的 monoMono.error(new RuntimeException("出錯了")).subscribe(System.out::println);//Supplier 提供包含異常的 monoMono.error(() -> new RuntimeException("出錯了")).subscribe(System.out::println);}

(9)first

@Testpublic void first() throws InterruptedException {//處理第一個 mono,如果第一個取消了,處理第二個...Mono.firstWithSignal(Mono.empty(), Mono.just("mono hello")).subscribe(System.out::println);Mono.firstWithValue(Mono.just("hello mono"), Mono.just("mono hello")).subscribe(System.out::println);Mono.firstWithSignal(List.of(Mono.just("hello mono"), Mono.just("mono hello"))).subscribe(System.out::println);Mono.firstWithValue(List.of(Mono.just("hello mono"), Mono.just("mono hello"))).subscribe(System.out::println);}

(10)sequenceEqual

@Testpublic void sequenceEqual() throws InterruptedException {//比較兩個 mono 是都相同Mono.sequenceEqual(Mono.just("hello mono"), Mono.just("hello mono")).subscribe(System.out::println);Mono.sequenceEqual(Mono.just("hello mono"), Mono.just("hello mono"), Object::equals).subscribe(System.out::println);Mono.sequenceEqual(Mono.just("hello mono"), Mono.just("hello mono"), Object::equals, 16).subscribe(System.out::println);}

(11)using

@Testpublic void using() throws InterruptedException {//callable返回mono,//function對mono進行操作//consumer執行清理操作//eager 為true時,consumer在subscribe之前調用Mono.using(() -> Mono.just("hello mono"), Function.identity(), t -> System.out.println(t)).subscribe(System.out::println);}

(12)when

@Testpublic void when() throws InterruptedException {//執行預設的操作Mono.when(Mono.just("hello mono").filter(a -> a.equals("hello mono"))).subscribe(System.out::println);}

(13)zip

壓縮操作

總結

以上是生活随笔為你收集整理的Mono 的创建的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一本色道久久综合亚洲二区三区 | 久久入口 | 日韩精品免费观看 | 少妇特黄一区二区 | www.国产在线视频 | 日韩欧美视频一区二区 | 亚洲国产天堂av | 91福利免费 | 天天看夜夜看 | 美女靠逼app | 久操精品视频 | 日本女人毛茸茸 | 污污免费视频 | 18黄暴禁片在线观看 | 黄色网av | 日韩美女视频19 | 亚洲精品99999 | 欧美精品大片 | 欧美综合自拍亚洲综合图片区 | 欧美成人免费观看 | 91肉色超薄丝袜脚交一区二区 | av在线资源站 | 18欧美性xxxx极品hd | 国产精品久久久久久免费免熟 | 蜜桃成人在线观看 | 青青超碰 | 6080av| 自拍99页| 亚洲免费三区 | 成人毛片在线精品国产 | 亚洲a免费| 久久免费精品国产 | 痴女扩张宫交脱垂重口小说 | 国产精品69久久久 | 日韩精品视频在线观看免费 | 波多野结衣一区二区三区中文字幕 | 男生和女生差差视频 | 黄色网页免费观看 | 大桥未久视频在线观看 | 亚洲看片| 国产成人久久 | 色屋永久 | 热久久国产| 国产日产精品一区二区 | 小少妇哺乳喂奶播放 | 成人乱码一区二区三区 | 中文字幕乱码人妻无码久久95 | 欧美夫妻性生活视频 | 天天操妹子 | 狼性av懂色av禁果av | 一级片黄色| 国产精品久久久久久久久久久免费看 | 国产精品视频在线播放 | 中文字幕日韩经典 | 亚洲永久无码精品一区二区 | 人超碰| 97avcc| 国产午夜精品免费一区二区三区视频 | 欧美视频福利 | 我要看一级黄色片 | 成人做爰www免费看视频网站 | 国产在线欧美在线 | 99精品中文字幕 | 亚洲国产视频在线观看 | 熟妇人妻久久中文字幕 | 国产亲伦免费视频播放 | 国产黄色片视频 | 欧美视频一区二区 | 久久老司机精品视频 | 三级全黄的视频 | 国产毛片18| 国产精品视频合集 | 亚洲成人生活片 | 69色堂 | 在线免费视频观看 | 中文字幕韩日 | 在线观看黄色av网站 | 国产成年无码久久久久毛片 | www.亚洲在线 | 日韩一级二级三级 | 天堂色av| 免费看成人片 | av大西瓜| 四虎在线影院 | 一本到av| 色综合图片区 | 日本高清黄色 | 国产91丝袜在线播放九色 | 国产欧美日本在线 | 中文字幕av高清 | 秋霞7777鲁丝伊人久久影院 | 男人天堂最新网址 | 午夜视频导航 | 果冻传媒18禁免费视频 | 日本精品久久久久 | 精品国产中文字幕 | 黄网在线免费 | 亚洲欧美国产高清va在线播放 | 天天干夜夜夜夜 |