Cha*_*ang 13 mono spring response flux spring-webflux
在 Spring Webflux 中, ResponseEntity<Mono> 与 Mono<ResponseEntity> 作为休息控制器的返回类型有什么区别?
什么时候最合适?
跟进这个问题,假设我需要返回一个列表,或者假设 Foo 的几个元素,有很多返回 Flux 的例子。返回 ResponseEntity<Flux> 或 Flux<ResponseEntity> 是否有意义?
当我在寻找这个问题时,我发现这里发布了同样的问题:https : //github.com/spring-projects/spring-framework/issues/22614,但没有答案,我搜索了 spring 文档,但没有找到任何信息.
谢谢您的帮助。
以下是您可以使用ResponseEntity返回值进行的各种选项:
ResponseEntity<Mono<T>>或者ResponseEntity<Flux<T>>——这使得响应状态和标头立即知道,而主体在稍后异步提供。主体是否是Mono或Flux取决于响应具有多少个值。Mono<ResponseEntity<T>>-- 这提供了所有三个 -- 响应状态、标头和正文,稍后异步提供。IT 允许响应状态和标头根据异步请求处理的结果而变化。Mono<ResponseEntity<Mono<T>>>或者Mono<ResponseEntity<Flux<T>>>也是可能的,但不太常见。它们首先异步提供响应状态和标头,然后是响应正文,稍后也在第二个点异步提供。WebFlux 支持使用单值反应类型异步生成 ResponseEntity,和/或主体的单值反应类型和多值反应类型。
因此,带注释的控制器上的返回类型实际上是像 Flux 或 Mono 这样的 Reactive Publisher,它发出一个表示要返回的数据的对象。
例子
Flux<AccountDto>
Run Code Online (Sandbox Code Playgroud)
或者也可以:
Flux<ResponseEntity<AccountDto>>
Run Code Online (Sandbox Code Playgroud)
我认为您甚至可以将原始 DTO 类型设置为返回类型,Webflux 会自动为您将其包装在发布者中。
有效的返回类型
非阻塞反应范式
在进行响应式编程时,您希望每一层都通过 Flux/Mono 进行通信。因此,您将从 ReactiveRepository 中返回一个 Flux,并且服务层也会将一个 Flux 返回给 Controller。基本上,在反应式编程中,一切都是 Flux/Mono。
内部结构
虽然 SpringMVC 和 Spring Webflux 带注释的控制器看起来很相似,但它们内部却有很大不同。例如,Webflux 使用 Jetty,而 SpringMVC 默认使用 Tomcat。在内部,Webflux 更像是一种非阻塞事件循环架构,而 SpringMVC 传统上利用线程池,每个请求有 1 个线程阻塞 I/O。
查看这篇文章以了解有关Spring WebFlux的更多详细信息
| 归档时间: |
|
| 查看次数: |
1473 次 |
| 最近记录: |