Spring Webflux中Mono <list <t >>与Flux <t>的差异

时间:2018-10-22 10:25:41

标签: spring-webflux reactor

我的理解是Mono<List<T>>是同步的Flux<T> 并且Flux不能成为Rest API的响应。

我是对的吗?

如果没有,Mono<List<T>>Flux<T>有什么区别 还是Flux可以在某些地方成为REST API响应?

2 个答案:

答案 0 :(得分:3)

  • 作为返回类型,Mono<List<T>>意味着您一次可以异步获得T元素的完整列表。
  • Flux<T>意味着您将获得零到许多T元素,可能随着它们的出现而一一对应。

如果从HTTP客户端获取诸如WebClientMono<List<T>>Flux<T>之类的返回类型,则从运行时的角度来看,如果返回的{{ 1}}例如Content-Type。在这种情况下,解码器将一枪反序列化响应。唯一的不同是,"application/json"提供了更多有趣的运算符,您随时可以Flux<T>退回到collectList

另一方面,如果返回的Mono<List>是流式传输的,例如Content-Type,那么这肯定会产生影响,因为您将在元素到来时一个接一个地获取它们。实际上,如果返回的流是无限的,则选择"application/stream+json"非常重要,因为另一个将永远不会完成。

答案 1 :(得分:1)

  • Mono<List<T>>将发出T类型的项目的零个或最大一个列表。
  • Flux<T>将发出零个或许多T类型的物品

Momo包装是有界的,Flux没有包装。

  

Mono<List<T>>是同步通量

Mono和Flux都是Reactor中指定的Publisher接口的Reactive Stream Specification实现。

Reactor Mono类: public abstract class Mono<T> implements Publisher<T> {...}

Reactor Mono类: public abstract class Flux<T> implements Publisher<T> {...}

  

助焊剂不能是rest api响应。   当然,Flux可以用作REST API的响应类型。通过使用Flux作为返回类型,您可以轻松地从异步处理切换到同步处理。如果您使用Spring Boot,甚至可以按照@Brian的说明将API端点的Content-Type更改为application/stream+json,就可以向用户传输数据。

请注意,Flux和Mono是非阻塞的,这意味着可以更有效地使用工作线程(计算机资源)。