首页 > 解决方案 > Mono.just(1) 与 Flux.just(1) 的区别

问题描述

我想知道,只有一个参数创建的MonoJust和创建的行为/保证有什么区别吗?FluxJust

从 Reactor Core 3.3.7 的源代码中我可以看到,前者使用Operators#ScalarSubscription作为其订阅对象,而后者使用其 private WeakScalarSubscription

这两者之间的唯一区别是在每个方法调用上都定义和检查了ScalarSubscription这个东西(计数器),并在一定程度上确保只调用一次。同时,将事物(非易失性标志)用于相同目的,但没有“仅一次”保证调用。volatile int onceonComplete()WeakScalarSubscriptionboolean terminadoonComplete()

在 Java 中使用volatile是有代价的,例如当一个人在高度并发的客户端代码中创建大量这些东西(使用Mono.just(1)或)时,这是有回报的。Flux.just(1)(正如我们在我们的项目中所做的flatMap那样,它在专用线程池上并行运行。)

没有类 javadoc MonoJust,所以我想知道我的假设是否正确:唯一的区别是FluxJust在某些情况下可能会多次发送完成信号 - 就是这样?还是有其他细微的差别?

标签: project-reactor

解决方案


我认为最大的区别在于你如何使用FluxMono. Mono发出一个项目或错误然后完成,而Flux可以发出多个元素,错误,然后完成信号。

just()方法旨在评估一个元素(或vararg的变体Flux)并立即返回它。我可以想象Flux只返回一个元素的情况。


推荐阅读