Reactor
1. 响应式编程
在响应式编程中,程序的执行是事件驱动的,通过回调机制处理数据,显著提升系统的响应效率,尤其适合处理 I/O 密集型的应用场景。
响应式编程的核心特性包括:
- 异步非阻塞:系统不等待操作完成,而是通过事件触发进行回调。
- 流式处理:通过声明式的方式操作数据流。
- 背压(Backpressure):处理生产者和消费者速率不匹配的问题,避免系统过载。
Reactor 是 Java 世界响应式编程的代表库之一,它基于 Reactive Streams 规范,提供强大且高效的响应式编程工具。
2. Reactive Streams 规范
Reactive Streams。它是 Java 响应式编程的一项规范,定义了以下四个核心接口:
- Publisher:发布者,负责产生数据流。
- Subscriber:订阅者,负责消费数据流。
- Subscription:订阅,连接发布者和订阅者,控制数据流的速率和背压。
- Processor:既是发布者,也是订阅者,用于数据流的中间处理。
Reactor 库正是基于 Reactive Streams 规范进行实现的。
3. Reactor 核心概念
- Mono:表示 0 或 1 个元素的异步处理。
- Flux:表示 0 到 N 个元素的异步处理。
它们都是响应式流的抽象,背后提供丰富的操作符(如 map、filter、flatMap 等),以声明式的方式处理流数据。
3-1. 核心依赖
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
</dependency>
3-2. Mono
Mono 代表一个异步的单值或空结果。它非常适合处理只需返回单个数据的异步操作.
常见操作符
- Mono.just(value):创建包含单个数据的 Mono。
- Mono.empty():创建一个不包含数据的 Mono。
- Mono.error(Throwable):创建一个以错误结束的 Mono。
- Mono.delay(Duration):延迟一段时间后发布信号。
3-3. Flux
Flux 表示 0 到 N 个元素的异步流,适用于处理列表、流数据等场景。
常见操作符
- Flux.just(value1, value2, …):创建包含多个数据的 Flux。
- Flux.fromIterable(Iterable):从集合或其他可迭代的数据源创建 Flux。
- Flux.range(int start, int count):创建一个包含一定范围整数的 Flux。
- Flux.interval(Duration):创建一个按时间间隔发布信号的 Flux。
4. 背压(Backpressure)
背压是 Reactor 中一个重要的概念,旨在处理生产者和消费者速率不匹配的问题。 当消费者无法跟上生产者的速度时,背压机制通过通知生产者暂停、丢弃数据或缓冲数据,防止系统崩溃。
5. 异常处理
Reactor 提供了几种方法来捕获和处理流中的异常:
- onErrorReturn:发生错误时,返回一个默认值。
- onErrorResume:发生错误时,切换到另一个流。
- doOnError:发生错误时,执行某个操作,但不改变流的内容。
能摸鱼就很舒服
Show Disqus Comments
扫码关注公众号:纯洁的微笑
发送 290992
即可立即永久解锁本站全部文章