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 RSocket:基于服务注册发现的 RSocket 负载均衡
Spring官方RSocket Broker 0.3.0发布: 快速构建你的RSocket架构