响应式库
spring-webflux
依赖于 reactor-core
并在内部使用它来组合异步逻辑并提供对响应式流的支持。通常,WebFlux API 返回 Flux
或 Mono
(因为这些在内部使用),并宽松地接受任何响应式流 Publisher
的实现作为输入。使用 Flux
与 Mono
是重要的,因为它有助于表达基数,例如,期望单个还是多个异步值,并且这对于做出决策是至关重要的(例如,在编码或解码HTTP消息时)。
对于带注解的控制器,WebFlux 会透明地适应应用程序选择的响应式库。这是通过 ReactiveAdapterRegistry
来实现的,它提供了对响应式库和其他异步类型的可插拔支持。该注册表内置支持 RxJava 3、Kotlin 协程和 SmallRye Mutiny,但您也可以注册其他类型。
对于功能性API(例如 [webflux-fn]、WebClient
等),WebFlux API 的一般规则适用 - 返回值为 Flux
和 Mono
,输入为响应式流 Publisher
。当提供一个 Publisher
,无论是自定义的还是来自另一个响应式库,它只能被视为具有未知语义(0..N)的流。但是,如果语义已知,您可以使用 Flux
或 Mono.from(Publisher)
来包装它,而不是传递原始的 Publisher
。
例如,给定一个不是 Mono
的 Publisher
,Jackson JSON 消息编写器期望多个值。如果媒体类型暗示无限流(例如,application/json+stream
),则值将被逐个写入和刷新。否则,值将被缓冲到列表中并呈现为 JSON 数组。