Mono.Defer()vs Mono.create()vs Mono.just()?

Ant*_* Tb 1 project-reactor spring-webflux

有人可以帮助我了解Mono.defer(),Mono.create()和Mono.just()之间的区别吗?如何正确使用?

Ily*_*ich 5

Mono.just(value) 是最原始的-一旦有了值,您就可以将其包装到Mono中,而下线的订户将得到它。

Mono.defer(monoSupplier)让您提供提供结果Mono实例的整个表达式。该表达式的求值推迟到有人订阅为止。在此表达式内,您还可以使用控制结构Mono.error(throwable)来表示错误状态(您不能使用来表示此情况Mono.just)。

Mono.create(monoSinkConsumer)是最高级的方法,可让您完全控制发射的值。取而代之的是需要返回Mono从回调(如在实例Mono.defer),你在得到控制MonoSink<T>,可以让你通过发射值MonoSink.success()MonoSink.success(value)MonoSink.error(throwable)方法。Reactor文档包含一些可能的Mono.create用例的好例子:链接到doc

一般建议是使用功能最弱的抽象来完成此工作:Mono.just -> Mono.defer -> Mono.create

  • 没错 通过使用供应商和消费者在Mono.defer和Mono.create中实现了懒惰(延迟评估)的效果。您没有将实际结果传递给他们,而是传递了一个表达式,该表达式一旦被求值以后就会给出预期的结果。通常,Mono.just通常在您已经具有计算值或期望快速构造该值后立即构造反应管道时使用。 (2认同)