我的理解是Mono<List<T>>
是同步的Flux<T>
并且Flux不能成为Rest API的响应。
我是对的吗?
如果没有,Mono<List<T>>
和Flux<T>
有什么区别
还是Flux可以在某些地方成为REST API响应?
答案 0 :(得分:3)
Mono<List<T>>
意味着您一次可以异步获得T
元素的完整列表。Flux<T>
意味着您将获得零到许多T
元素,可能随着它们的出现而一一对应。如果从HTTP客户端获取诸如WebClient
,Mono<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是非阻塞的,这意味着可以更有效地使用工作线程(计算机资源)。