无法使用Kotlin协程获取Spring Webflux以返回Flow中的任何内容

时间:2019-11-29 15:54:08

标签: kotlin spring-webflux kotlin-coroutines

https://bitbucket.org/HughG/kotlin_coroutine_play/src/master/spring-coro-server/src/main/kotlin/,我有一个简单的Spring Boot Webflux应用程序,在该应用程序中我试图返回(科特琳协程)流程。我松散地基于https://www.baeldung.com/spring-boot-kotlin-coroutines,但是没有使用内存中的@MessagingGateway提供QueueChannel的“事件”对象(简单的Kotlin数据),而不是使用存储库作为数据源。具有一个String属性的类)。在这个玩具项目中,频道是通过@Scheduled方法填充的,该方法每隔几秒钟运行一次。

我想要的行为是,当请求获取当前事件列表时

  • 如果频道中有一些事件,请将其全部删除并返回;
  • 否则,等待(超时)下一个事件并返回该事件
  • 除非超过了超时时间,否则将返回空的事件列表。

但是,我尝试过的所有变体都具有以下结果之一。

  • 响应一个空的JSON对象。
  • 根本没有响应,因为它是无限流动,并且正在积极等待每个新事件。
  • 引发KotlinNullPointerException尝试序列化结果(当我使用channelFlow时,在其中将显式async / await对包装到通道请求周围。< / li>
  • 可以的,如果我将Flow明确地收集到List中,这要求我用runBlocking包裹整个东西,从而使使用协程/ webflux的意义破灭了,在等待事件时请求线程被阻塞,而不是可以重用。

如果任何人有时间看项目(应该使用Gradle进行构建),使用示例端点,并给我一个线索,我将不胜感激。

编辑:顶层构建中还有一个单独的玩具项目,名为coroutine-sort,出于这个问题的目的,您可以忽略该项目。

编辑:我忘了提,我看了几个相关的问题,但是它们似乎并没有帮助。

0 个答案:

没有答案