Java中的响应式编程:Project Reactor与RxJava库

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java中的响应式编程:Project Reactor与RxJava



响应式编程是一种面向异步数据流和事件处理的开发范式。在Java中,这一范式通过实现Reactive Streams规范的库得到了广泛应用。最流行的两种实现是Project Reactor(Spring WebFlux的基础)和RxJava(Java的响应式扩展)。



与传统命令式方法不同,响应式编程能够高效处理大量数据,而不会阻塞执行线程。这对于现代高负载Web应用、微服务和实时系统尤为重要。



响应式编程的核心概念



响应式方法基于三个关键概念:



  • Observable(发布者) — 数据源,可以生成事件(元素、错误、完成)。
  • Observer(订阅者) — 数据消费者,对事件做出响应。
  • 操作符 — 流转换函数(map、filter、flatMap、combineLatest等)。


响应式流遵循背压原则:订阅者可以告知发布者自己准备处理多少元素,从而防止内存溢出。



Project Reactor:Flux与Mono



Project Reactor是Pivotal(现为VMware)开发的响应式库,是Spring WebFlux的基础。它提供两种主要类型:



  • Flux<T> — 可包含0、1或多个元素的流(异步序列)。
  • Mono<T> — 包含0或1个元素的流(类似于Optional,但为异步)。


示例:创建和处理Flux



import reactor.core.publisher.Flux;import reactor.core.publisher.Mono;

public class ReactorExample { public static void main(String[] args) { // 从列表创建流 Flux<String> names = Flux.just("Alice", "Bob", "Charlie", "Diana");

// 应用操作符 names.filter(name -> name.length() > 3) .map(String::toUpperCase) .subscribe( result -> System.out.println("收到: " + result), error -> System.err.println("错误: " + error), () -> System.out.println("流已完成") );

// Mono — 用于单个元素 Mono<String> greeting = Mono.just("你好,响应式!"); greeting.subscribe(System.out::println); }}


执行结果:

收到: ALICE收到: CHARLIE收到: DIANA流已完成你好,响应式!


RxJava:Observable、Flowable与Single



RxJava是响应式扩展(Rx)的Java移植版本。在3.x版本(RxJava 3)中,提供以下主要类型:



  • Observable<T> — 包含0..N个元素的流,不支持背压。
  • Flowable<T> — 包含0..N个元素的流,支持背压。
  • Single<T> — 恰好包含一个元素或错误的流。
  • Maybe<T> — 包含0或1个元素的流。
  • Completable — 无数据的流,仅发送完成或错误信号。


示例:使用Observable和操作符



import io.reactivex.rxjava3.core.Observable;import io.reactivex.rxjava3.core.Single;

public class RxJavaExample { public static void main(String[] args) { // 从数字范围创建Observable Observable<Integer> numbers = Observable

推荐