Webflux(二)-Reactor

2024/11/06

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
即可立即永久解锁本站全部文章