当前位置: 首页 > news >正文

Spring响应式编程之Reactor核心组件

Reactor核心组件

  • Flux和Mono组件
    • (1)Flux组件
    • (2)Mono组件

Flux和Mono组件

Reactor 框架提供了两个核心组件来发布数据,分别是 Flux 和 Mono 组件。两者都是实现Publisher接口的高级抽象,可以说是应用程序开发过程中最基本的编程对象。二者都可以被onComplete信号或者onError信号所终止。

(1)Flux组件

表示0到N个元素的异步序列,可以是有限的或无限的。

示例:

创建Flux

import reactor.core.publisher.Flux;public class FluxExample {public static void main(String[] args) {// 从静态数据创建Flux<String> flux1 = Flux.just("Hello", "World");// 从集合创建Flux<Integer> flux2 = Flux.fromIterable(Arrays.asList(1, 2, 3, 4, 5));// 生成动态数据Flux<Integer> flux3 = Flux.range(1, 10);// 创建无限流Flux<Long> flux4 = Flux.interval(Duration.ofSeconds(1));// 订阅Fluxflux1.subscribe(System.out::println);flux2.subscribe(System.out::println);flux3.subscribe(System.out::println);flux4.subscribe(System.out::println);}
}

操作Flux

import reactor.core.publisher.Flux;public class FluxOperationsExample {public static void main(String[] args) {Flux<Integer> flux = Flux.range(1, 10).filter(i -> i % 2 == 0) // 过滤偶数.map(i -> i * i)         // 映射到平方.doOnNext(System.out::println); // 打印每个元素flux.subscribe();}
}

(2)Mono组件

表示0到1个元素的异步序列,通常用于处理单个结果或空结果的情况。

示例:

创建Mono

import reactor.core.publisher.Mono;public class MonoExample {public static void main(String[] args) {// 从静态数据创建Mono<String> mono1 = Mono.just("Hello, Mono");// 创建空的MonoMono<String> mono2 = Mono.empty();// 创建包含错误的MonoMono<String> mono3 = Mono.error(new RuntimeException("An error occurred"));// 订阅Monomono1.subscribe(System.out::println);mono2.subscribe(System.out::println);mono3.subscribe(System.out::println, System.err::println);}
}

操作Mono

import reactor.core.publisher.Mono;public class MonoOperationsExample {public static void main(String[] args) {Mono<Integer> mono = Mono.just(10).map(i -> i * 2)       // 映射到双倍.doOnNext(System.out::println) // 打印元素.flatMap(i -> Mono.just(i / 2)); // 扁平映射mono.subscribe();}
}

某种程度上可以把 Mono 看作是 Flux 的一种特例,而两者之间也可以进行相互的转换和融合。如果你有两个 Mono 对象,那么把它们合并起来就能获取一个 Flux 对象。除此之外,把一个 Flux 转换成 Mono 对象也有很多办法,例如对一个 Flux 对象中所包含的元素进行计数操作就能得到一个 Mono 对象。

Flux和Mono对象的转换:

import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;public class ConversionExample {public static void main(String[] args) {// Mono转FluxMono<String> mono = Mono.just("Hello, World");Flux<String> fluxFromMono = mono.flux();fluxFromMono.subscribe(System.out::println);// Flux转MonoFlux<Integer> flux = Flux.just(1, 2, 3, 4, 5);Mono<Integer> monoFromFlux = flux.next();monoFromFlux.subscribe(System.out::println);}
}
http://www.lryc.cn/news/380767.html

相关文章:

  • 动手学深度学习(Pytorch版)代码实践 -计算机视觉-37微调
  • 视频监控平台:支持交通部行业标准JT/T905协议(即:出租汽车服务管理信息系统)的源代码的函数和功能介绍及分享
  • 【jenkins1】gitlab与jenkins集成
  • 边缘计算设备有哪些
  • C++初学者指南第一步---7.控制流(基础)
  • MFC学习--CListCtrl复选框以及选择
  • 如何与PM探讨项目
  • 今年618各云厂商的香港服务器优惠活动汇总
  • Android平台下VR头显如何低延迟播放4K以上超高分辨率RTSP|RTMP流
  • WHAT - NextJS 系列之 Rendering - Server Components
  • Web项目部署后浏览器刷新返回Nginx的404错误对应解决方案
  • 视频与音频的交响:探索达摩院VideoLLaMA 2的技术创新
  • 更改ip后还被封是ip质量的原因吗?
  • 【Oracle】调用HTTP接口
  • Minillama3->sft训练
  • 【教师资格证考试综合素质——法律专项】学生伤害事故处理办法以及未成人犯罪法笔记相关练习题
  • Vite: 关于静态资源的处理机制
  • React之useEffect
  • 测试辅助工具(抓包工具)的使用3 之 弱网测试
  • 【Redis】基于Redission实现分布式锁(代码实现)
  • websocket 安全通信
  • 代码生成技术技术-janino
  • QT事件处理系统之四:自定义事件的注册及拦截、发送
  • vs2022 studio控制台出现中文乱码解决
  • 支持向量机介绍
  • 电压互感器在线监测的原理
  • 算法训练与程序竞赛题目集合(L4)
  • Selenium进行Web自动化测试
  • 模拟算法讲解
  • Leetcode 3196. Maximize Total Cost of Alternating Subarrays