Project Reactor 是基于 Reactive Streams 的Java响应式框架,核心为Mono(0/1元素)和Flux(0-N元素),支持背压、惰性操作符链、线程调度(如boundedElastic/parallel)。
Project Reactor 是 Java 生态中主流的响应式编程框架,基于 Reactive Streams 规范实现,专为构建高吞吐、低延迟、非阻塞的异步应用而设计。它不是对传统编程的替代,而是针对 I/O 密集型、事件驱动或流式数据处理场景的有力补充。
Reactor 提供两个核心发布者(Publisher)类型,对应不同数据流形态:
二者都实现了 Publisher 接口,可被订阅,也提供丰富的操作符(operator)进行链式转换、组合与错误处理。
背压是 Reactive Streams 的核心约定,用于协调生产者与消费者之间的数据速率。当下游处理能力不足时,上游可暂缓发送或降级策略,避免内存溢出。
onBackpressureBuffer()、onBackpressureDrop()、limitRate(n);
Reactor 的操作符(如 map、filter、flatMap、retry)不会立即触发执行,而是在调用 subscribe() 或终端操作(如 block()、toFuture())时才真正组装并启动数据流。
doOnNext、doOnError 等“钩子”操作符;log() 插入链中,输出生命周期事件(onSubscribe、onNext、onComplete 等)。Reactor 不绑定特定线程模型,但提供 Schedulers 工具类统一管理执行上下文:
Schedulers.boundedElastic():适用于阻塞 I/O(如 JDBC、文件读写),带线程池与队列保护;Schedulers.parallel():适用于 CPU 密集型任务,固定大小线程池(通常为 CPU 核心数);Schedulers.immediate():同步执行,常用于测试;publishOn() 切换下游操作符执行的线程;subscribeOn() 指定整个流的起始执行上下文(仅首次生效)。注意:WebFlux 应用中,Web 层默认运行在事件循环线程(如 Netty EventLoop),应避免在其中执行阻塞操作,必要时显式切换到 boundedElastic。