视频字幕
Java 中的 Flux 和 Mono 是 Project Reactor 提供的两种核心响应式类型,用于表示异步序列。Flux 表示一个包含 0 到 N 个元素的异步序列,可以发射多个元素。而 Mono 表示一个包含 0 到 1 个元素的异步序列,即可能发射一个元素或不发射任何元素。它们都是响应式流的发布者,为异步编程提供了强大的支持。
创建 Flux 和 Mono 有多种方法。对于 Flux,可以使用 just 方法从已知元素创建,使用 range 方法创建整数序列,或使用 empty 创建空序列。对于 Mono,同样可以使用 just 方法创建单个元素的序列,使用 empty 创建空序列,或使用 fromCallable 从可调用对象创建。这些创建方法为响应式编程提供了灵活的起点。
操作符是 Flux 和 Mono 的核心功能,用于转换、过滤和组合数据流。转换操作符如 map 可以将元素从一种类型转换为另一种类型,flatMap 则可以扁平化嵌套的流。过滤操作符如 filter 根据条件筛选元素,take 可以限制元素数量。组合操作符如 zip 可以组合多个流,merge 则可以合并多个流。这些操作符都是链式的且惰性执行,只有在订阅时才会真正执行。
订阅是响应式流中触发执行的关键步骤。通过调用 subscribe 方法,我们将发布者和订阅者连接起来。subscribe 方法有多种重载形式,可以处理不同的信号。最简单的是无参数的 subscribe,还可以传入消费者函数来处理元素、错误和完成信号。订阅方法返回一个 Disposable 对象,可以用来取消订阅,停止流的执行。这种设计提供了灵活的控制机制。
总结一下 Flux 和 Mono 的关键概念。Publisher 是数据发布者,Subscriber 是数据订阅者,它们通过 Subscription 建立连接。响应式流通过信号进行通信,包括 onNext 传递数据、onError 传递错误、onComplete 表示完成。操作符提供了丰富的数据处理能力,可以链式调用。Scheduler 负责线程调度,而 Backpressure 则控制数据流速。掌握这些概念,就能有效使用 Project Reactor 进行响应式编程。