project-reactor - Mono.just(1) 与 Flux.just(1) 的区别
问题描述
我想知道,只有一个参数创建的MonoJust
和创建的行为/保证有什么区别吗?FluxJust
从 Reactor Core 3.3.7 的源代码中我可以看到,前者使用Operators#ScalarSubscription
作为其订阅对象,而后者使用其 private WeakScalarSubscription
。
这两者之间的唯一区别是在每个方法调用上都定义和检查了ScalarSubscription
这个东西(计数器),并在一定程度上确保只调用一次。同时,将事物(非易失性标志)用于相同目的,但没有“仅一次”保证调用。volatile int once
onComplete()
WeakScalarSubscription
boolean terminado
onComplete()
在 Java 中使用volatile
是有代价的,例如当一个人在高度并发的客户端代码中创建大量这些东西(使用Mono.just(1)
或)时,这是有回报的。Flux.just(1)
(正如我们在我们的项目中所做的flatMap
那样,它在专用线程池上并行运行。)
没有类 javadoc MonoJust
,所以我想知道我的假设是否正确:唯一的区别是FluxJust
在某些情况下可能会多次发送完成信号 - 就是这样?还是有其他细微的差别?
解决方案
我认为最大的区别在于你如何使用Flux
和Mono
. Mono
发出一个项目或错误然后完成,而Flux
可以发出多个元素,错误,然后完成信号。
just()
方法旨在评估一个元素(或vararg
的变体Flux
)并立即返回它。我可以想象Flux
只返回一个元素的情况。
推荐阅读
- java - listAll() 不适用于 Android 中的 firebase
- python - Pandas groupby 具有针对大型数据集和大量组的自定义函数
- javascript - 是否可以使用 JavaScript 在页面上的亮模式和暗模式之间切换?
- python - 如何隐藏打印文本
- typescript - 如何在 vue.js 版本 3 中上传文件
- azure-data-factory - 调试和触发管道执行两次
- scala - 使用 Gatling 发出动态请求
- javascript - 反应重新渲染表格的每个单元格
- excel - 按月周期的 VBA 透视过滤器
- c# - 获取 TcpListener 的自动分配的本地 IP 地址