reactor3 flux 的使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了reactor3 flux 的使用相关的知识,希望对你有一定的参考价值。

参考技术A reactor 本质上是观察者模式的使用
添加数据

消费数据 subscribe方法

数据中间处理环节 do 系列接口

buffer 的使用

flatmap, map 的区别
先看下图

返回的不一样
flatMap必须返回的是个publisher 而map 返回的是一个对象 这个对象既可以是item 也可以是封装为Flux ,Mono

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

【中文标题】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接口不携带信息是流是可以重复收集的冷流,每次收集时触发执行相同的代码,还是热流在同一运行中发出不同的值每个集合的来源。通常流代表冷流

【讨论】:

以上是关于reactor3 flux 的使用的主要内容,如果未能解决你的问题,请参考以下文章

(12)Reactor 3 自定义数据流——响应式Spring的道法术器

如何在文件行出现并将它们表示为 Flux 时读取它们?

(15)Reactor 3 Operators——响应式Spring的道法术器

附2:Reactor 3 之选择合适的操作符——响应式Spring的道法术器

如何将 Mono<List<String>> 转换为 Flux<String>

如何用 Flux (Reactor) 冲洗?