Spring WebFlux 使用 RSocket:Kotlin 协程 Flow 与 Reactor Flux 消息格式

Posted

技术标签:

【中文标题】Spring WebFlux 使用 RSocket:Kotlin 协程 Flow 与 Reactor Flux 消息格式【英文标题】:Spring WebFlux using RSocket: Kotlin coroutines Flow vs Reactor Flux message format 【发布时间】:2021-06-22 20:23:29 【问题描述】:

当我们使用 Spring WebFlux 的 RSocket(通过 WebSockets)支持使用 Kotlin Coroutines Flow 和 Reactor Flux 发出值时,IO 流量有什么不同吗?

@MessageMapping("stream")
suspend fun send(): kotlinx.coroutines.flow.Flow<SomeClass> = ...

VS

@MessageMapping("stream")
fun send(): reactor.core.publisher.Flux<SomeClass> = ...

另外,客户端代码(带有rsocket-websocket-client的JS)是否应该根据服务器使用Kotlin Coroutines Flow还是Reactor Flux而有所不同?

【问题讨论】:

【参考方案1】:

不,它们应该是相同的。 Spring 应该处理它们之间的差异。也就是说,如果您发现任何错误,您应该提出它们。

客户端代码应该不可能观察服务器是使用 Flux 还是 Flow 定义的。除此之外,希望客户端也不知道服务器的实现语言。

我认为您的第一个示例也不需要暂停,因为 Flow 通常会很冷。 https://kotlin.github.io/kotlinx.coroutines/kotlinx-coroutines-core/kotlinx.coroutines.flow/-flow/

Flow接口不携带信息是流是可以重复收集的冷流,每次收集时触发执行相同的代码,还是热流在同一运行中发出不同的值每个集合的来源。通常流代表冷流

【讨论】:

以上是关于Spring WebFlux 使用 RSocket:Kotlin 协程 Flow 与 Reactor Flux 消息格式的主要内容,如果未能解决你的问题,请参考以下文章

禁用 Springboot RSocket 项目的“默认”Netty 端口

教你如何在Spring Boot中使用RSocket

Spring RSocket:基于服务注册发现的 RSocket 负载均衡

Spring官方RSocket Broker 0.3.0发布: 快速构建你的RSocket架构

Spring官方RSocket Broker 0.3.0发布: 快速构建你的RSocket架构

RSocket与Spring Security整合