一句话概括
Project Reactor 是 Spring WebFlux 底层的响应式编程库,基于 Reactive Streams 规范提供了 Mono<T>(0-1 个元素)和 Flux<T>(0-N 个元素)两种核心类型,让开发者用声明式 DSL 编排异步、非阻塞的数据流。
1. Reactive Streams 规范
Reactive Streams 定义了 4 个核心接口,是整个响应式生态的基石:
2026/7/16大约 3 分钟
Project Reactor 是 Spring WebFlux 底层的响应式编程库,基于 Reactive Streams 规范提供了 Mono<T>(0-1 个元素)和 Flux<T>(0-N 个元素)两种核心类型,让开发者用声明式 DSL 编排异步、非阻塞的数据流。
Reactive Streams 定义了 4 个核心接口,是整个响应式生态的基石:
Reactor 的操作符是构建响应式流水线的"乐高积木"——每个操作符包装上一个 Publisher,通过组合串联实现数据的转换、过滤、合并与条件选择。
| 操作符 | 作用 | 顺序保证 | 并发度 |
|---|---|---|---|
map |
同步 1:1 转换 | ✅ 保持顺序 | 串行 |
flatMap |
异步 1:N 展平 | ❌ 无顺序保证 | 并发 |
concatMap |
顺序 1:N 展平 | ✅ 保持顺序 | 串行 |
filter |
按条件过滤 | ✅ 保持顺序 | 串行 |
响应式流中错误是终止事件——发生错误后流会停止发射。Reactor 提供了声明式的操作符来优雅容错、重试恢复,以及通过背压让下游控制上游的发射速率。
在响应式编程中,try-catch 不再适用。Reactor 用操作符代替了异常捕获:
Mono.<String>error(new RuntimeException("oops"))
.onErrorReturn("fallback");
// → "fallback"
// 按异常类型区分
Flux.just("valid", "invalid")
.map(this::parse)
.onErrorReturn(IllegalArgumentException.class, "default");
调度器控制响应式操作在哪个线程池上执行——选对调度器,是高性能响应式应用的关键。正确拆分 CPU 密集型与 I/O 密集型任务,才能充分发挥非阻塞的优势。
| 调度器 | 线程池 | 用途 |
|---|---|---|
Schedulers.immediate() |
当前线程 | 测试、简单场景 |
Schedulers.single() |
单线程,可复用 | 共享的单线程池 |
Schedulers.parallel() |
固定线程数(= CPU 核数) | CPU 密集型计算 |
Schedulers.boundedElastic() |
有上限的弹性线程池 | 阻塞 I/O 操作 |