Mono<List<T>> 与 Spring webflux 中的 Flux<T> 的区别
Mono<List<T>> difference with Flux<T> in Spring webflux
我的理解是Mono<List<T>>
是同步的Flux<T>
并且 Flux 无法成为休息 api 响应。
我说的对吗?
如果不是,Mono<List<T>>
和 Flux<T>
有什么区别
或者在某些地方 Flux 可以是休息 api 响应?
- 作为 return 类型,
Mono<List<T>>
意味着您将一次性获得 T
元素的完整列表。
Flux<T>
意味着您将获得零到许多 T
个元素,可能会一个接一个地出现。
如果您从 HTTP 客户端获取此类 return 类型,例如 WebClient
、Mono<List<T>>
和 Flux<T>
从运行时的角度来看可能或多或少是等效的,如果 returned Content-Type
例如 "application/json"
。在这种情况下,解码器将一次性反序列化响应。唯一不同的是,Flux<T>
提供了更多有趣的运算符,您可以随时 collectList
并退回到 Mono<List>
.
另一方面,如果 returned Content-Type
是流媒体,例如 "application/stream+json"
那么这肯定会产生影响,因为您将通过他们来了。事实上,如果 returned 流是无限的,选择 Flux<T>
非常重要,因为另一个永远不会完成。
Mono<List<T>>
将发出零个或最大一个 T
类型的项目列表。
Flux<T>
将发出零个或多个 T
类型的项目
Momo
环绕是有界的,Flux
不是。
Mono<List<T>>
is a synchronized Flux
Mono 和 Flux 都是 Reactor implementation of a Publisher interface specified in a Reactive Stream Specification。
Reactor Mono class:
public abstract class Mono<T> implements Publisher<T> {...}
Reactor Mono class:
public abstract class Flux<T> implements Publisher<T> {...}
Flux could not be a rest api response.
Of course Flux
can be used as response type of REST API. By using Flux as return type you can easily switch from asynchronous to synchronous processing . If you use Spring Boot you can even stream data to your consumer just by changing the Content-Type
of you API endpoint to application/stream+json
as mention by @Brian.
请注意,Flux 和 Mono 是非阻塞的,这意味着您可以更有效地使用工作线程(计算机资源)。
我的理解是Mono<List<T>>
是同步的Flux<T>
并且 Flux 无法成为休息 api 响应。
我说的对吗?
如果不是,Mono<List<T>>
和 Flux<T>
有什么区别
或者在某些地方 Flux 可以是休息 api 响应?
- 作为 return 类型,
Mono<List<T>>
意味着您将一次性获得T
元素的完整列表。 Flux<T>
意味着您将获得零到许多T
个元素,可能会一个接一个地出现。
如果您从 HTTP 客户端获取此类 return 类型,例如 WebClient
、Mono<List<T>>
和 Flux<T>
从运行时的角度来看可能或多或少是等效的,如果 returned Content-Type
例如 "application/json"
。在这种情况下,解码器将一次性反序列化响应。唯一不同的是,Flux<T>
提供了更多有趣的运算符,您可以随时 collectList
并退回到 Mono<List>
.
另一方面,如果 returned Content-Type
是流媒体,例如 "application/stream+json"
那么这肯定会产生影响,因为您将通过他们来了。事实上,如果 returned 流是无限的,选择 Flux<T>
非常重要,因为另一个永远不会完成。
Mono<List<T>>
将发出零个或最大一个T
类型的项目列表。Flux<T>
将发出零个或多个T
类型的项目
Momo
环绕是有界的,Flux
不是。
Mono<List<T>>
is a synchronized Flux
Mono 和 Flux 都是 Reactor implementation of a Publisher interface specified in a Reactive Stream Specification。
Reactor Mono class:
public abstract class Mono<T> implements Publisher<T> {...}
Reactor Mono class:
public abstract class Flux<T> implements Publisher<T> {...}
Flux could not be a rest api response. Of course
Flux
can be used as response type of REST API. By using Flux as return type you can easily switch from asynchronous to synchronous processing . If you use Spring Boot you can even stream data to your consumer just by changing theContent-Type
of you API endpoint toapplication/stream+json
as mention by @Brian.
请注意,Flux 和 Mono 是非阻塞的,这意味着您可以更有效地使用工作线程(计算机资源)。