首页 > 解决方案 > 什么时候应该阻止/订阅 Mono/Flux?

问题描述

假设你有一些助焊剂和单声道

val people: Flux<Person> = repo.getPeople()
val peopleCount: Mono<Int> = people.count()

并从例如 WebFlux 控制器返回 Mono<Response>:

data class Response(
    val people: List<People>,
    val personCount: Int
)

应用程序中将通量和单声道分别解析为 List 和 Int 的适当位置在哪里?你只是阻止()一切吗?有没有办法让框架解决所有问题?

编辑:我想我的主要困惑是我看到的所有教程响应对象中的字段实际上都不是反应性的,所以看起来我需要在从控制器返回对象之前解决所有问题。如果响应对象看起来像这样,对我来说会更有意义

data class Response(
    val people: Flux<People>,
    val personCount: Mono<Int>
)

标签: javakotlinspring-webfluxreactor

解决方案


如果您在 servlet 世界中使用反应器,则只能阻止,即使这样您也可以传回 Mono/Flux,这将是一个异步请求。

给你一个例子,比如,

return repo.getPeople().collectList().map( people -> new response(peoples, people.count())

最终成为Mono<Response>框架将订阅的。

您需要在 Mono/Flux 上使用运算符,而不是阻塞反应链。我建议查看 Reactor Java 文档。每个操作员都有很棒的图表,可以直观地了解操作员正在做什么。


推荐阅读