You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Webflux结合Kotlin协程返回Flow无结果问题求助

求助:Spring Boot Webflux + Kotlin协程Flow的实现问题

我目前在维护一个简单的Spring Boot Webflux应用,核心是尝试用Kotlin协程的Flow作为接口返回值。这个项目参考了Spring Boot整合Kotlin协程的常规实现,但没有用数据库做数据源,而是靠内存里的@MessagingGateway提供的QueueChannel来存储事件对象——就是一个只带单个String属性的Kotlin数据类。

项目里还加了个定时任务:有个被@Scheduled注解的方法,每隔几秒就往这个通道里塞新的事件数据。

我想要实现的接口行为是这样的:

  • 当收到请求时,如果通道里已经有事件,就一次性取出所有事件返回;
  • 如果通道是空的,就进入等待状态(带超时时间),要是超时前有新事件进来,就返回这个新事件;如果超时了,就返回空的事件列表。

但试了好几种实现方式,要么踩坑:

  • 问题1:接口返回空的JSON对象;
  • 问题2:无限等待新事件,接口完全没响应(因为Flow被写成无限流了);
  • 问题3:用channelFlow配合内部的async/await调用通道时,序列化结果直接抛出KotlinNullPointerException;
  • 问题4:显式把Flow收集成List(得用runBlocking包裹)倒是能正常跑,但会阻塞请求线程,完全违背了协程和Webflux非阻塞的设计初衷。

恳请有时间的开发者帮忙看看这个Gradle可构建的项目,测试下示例端点,指点下问题到底出在哪。

注:顶层构建里的coroutine-sort子项目可以忽略;我已经查过相关问题(比如Webflux Kotlin Coroutines Flow doesn't return any results、Spring Boot Rest Service With Kotlin Coroutines)但没解决。

内容的提问来源于stack exchange,提问作者HughG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:46:05