响应式库

spring-webflux 依赖于 reactor-core 并在内部使用它来组合异步逻辑并提供对响应式流的支持。通常,WebFlux API 返回 FluxMono(因为这些在内部使用),并宽松地接受任何响应式流 Publisher 的实现作为输入。使用 FluxMono 是重要的,因为它有助于表达基数,例如,期望单个还是多个异步值,并且这对于做出决策是至关重要的(例如,在编码或解码HTTP消息时)。

对于带注解的控制器,WebFlux 会透明地适应应用程序选择的响应式库。这是通过 ReactiveAdapterRegistry 来实现的,它提供了对响应式库和其他异步类型的可插拔支持。该注册表内置支持 RxJava 3、Kotlin 协程和 SmallRye Mutiny,但您也可以注册其他类型。

对于功能性API(例如 [webflux-fn]WebClient 等),WebFlux API 的一般规则适用 - 返回值为 FluxMono,输入为响应式流 Publisher。当提供一个 Publisher,无论是自定义的还是来自另一个响应式库,它只能被视为具有未知语义(0..N)的流。但是,如果语义已知,您可以使用 FluxMono.from(Publisher) 来包装它,而不是传递原始的 Publisher

例如,给定一个不是 MonoPublisher,Jackson JSON 消息编写器期望多个值。如果媒体类型暗示无限流(例如,application/json+stream),则值将被逐个写入和刷新。否则,值将被缓冲到列表中并呈现为 JSON 数组。