我应该在基于控制器的Spring Webflux服务中将Flow用作返回类型吗?

我正在尝试在下一个Spring Boot服务中使用Kotlin coroutinesspring-data-r2dbcdatabaseclient)。 我已经熟悉这两个概念,但是随着我们对实现细节的深入研究,我开始问自己这个问题。

在我看到的大多数示例中,每个返回某种集合的端点在迁移到反应性方法时都将返回Flow。

虽然没有其他(非阻塞)方式可以使用Mono / Flux进行操作,因为我们希望将订阅移交给引擎(Webflux),因此Kotlin Flows的情况则大不相同。 Flow的终端操作正在暂停,这使它们本质上无阻塞。 这意味着我可以随时随地以一种非阻塞的方式终止流,例如,使用常规的List

当然,潜在的热门发布者,反应式传输/协议等可能存在更复杂的场景,但就我而言,这是一种非常传统的服务。我们决定使用反应式方法的唯一原因是它受IO限制:对于每个API调用,我们都需要通过HTTP / REST从多个其他服务中获取数据,然后执行一些数据库查询,然后返回合并的结果。 因此,问题是:将流简化为常规的List,例如在存储库中,将流分散到多个应用程序层(控制器,服务,存储库)是否有意义? >

    suspend fun findByEvent(id: String): List<MyEntity> =
        databaseclient.execute(MY_QUERY)....all().asFlow().toList()

这样我的其余应用程序层甚至对Flow一无所知(整个调用链仍然保持可挂起状态)?

ykwdcy 回答:我应该在基于控制器的Spring Webflux服务中将Flow用作返回类型吗?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/2839527.html

大家都在问