1. Flux.fromIterable/fromStream/fromFuture 的工程应用
Flux.fromIterable、Flux.fromStream、Flux.fromFuture 这三个工厂方法分别适用于什么工程场景?使用时有什么注意事项?
- 三种工厂方法的数据来源与适用场景
- fromStream 的流不可复用问题
- fromFuture 与异步任务(CompletableFuture)的桥接
Flux.fromIterable 用于把 Collection/Iterable 集合转换为 Flux,适合批量数据源,数据在订阅时逐条发射,且 Iterable 可被多次订阅复用。Flux.fromStream 用于把 Java Stream 转换为 Flux,但 Stream 只能被消费一次,多次订阅会抛异常,因此通常配合 defer 使用以避免复用问题。Flux.fromFuture 用于把 CompletableFuture 等异步任务的结果桥接为响应式流,返回只发射单个结果的 Flux(单值流;如需 Mono 可用 Mono.fromFuture),适合把基于回调的异步库接入 Reactor 链。工程上:fromIterable 用于内存集合;fromStream 用于已存在的 Stream 数据源(注意一次性);fromFuture 用于与 CompletableFuture 类异步 API 集成。
三者都是"把非响应式数据源拉入响应式世界"的桥梁。区别在于数据源的特性:Iterable 可复用,Stream 一次性,Future 是异步单值。理解这些特性是避免订阅错误的关键。