spring-webflux依赖于反应堆核心,并在内部使用它来构成异步逻辑并提供Reactive Streams支持。通常,WebFlux API返回Flux或Mono(因为它们在内部使用),并且宽容地接受任何Reactive Streams Publisher实现作为输入。 Flux vs Mono的使用很重要,因为它有助于表达基数,例如,期望单个或多个异步值,并且对于决策(例如在编码或解码HTTP消息时)至关重要。
对于带注解的控制器,WebFlux透明地适应应用程序选择的反应式库。这是在ReactiveAdapterRegistry的帮助下完成的,该工具为反应性库和其他异步类型提供了可插入的支持。该注册表具有对RxJava和CompletableFuture的内置支持,但是您也可以注册其他注册表。
对于功能性API(例如功能性端点,WebClient等),WebFlux API的一般规则适用于-Flux和Mono作为返回值,而Reactive Streams Publisher作为输入。提供发布者(无论是自定义的还是来自其他反应性库的发布者)时,只能将其视为语义未知(0..N)的流。但是,如果知道语义,则可以用Flux或Mono.from(Publisher)包装它,而不用传递原始Publisher。
例如,给定的发布者不是Mono,Jackson JSON消息编写者需要多个值。如果媒体类型暗示无限流(例如application / json + stream),则将分别写入和刷新值。否则,值将缓冲到列表中并呈现为JSON数组。