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

时间:2019-05-13 15:25:22

标签: spring-webflux project-reactor

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

1 个答案:

答案 0 :(得分:5)

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

Mono.defer(monoSupplier)可让您提供提供结果Mono实例的整个表达式。该表达式的求值推迟到有人订阅为止。在此表达式内,您还可以使用诸如Mono.error(throwable)之类的控制结构来表示错误情况(您无法使用Mono.just来做到这一点)。

Mono.create(monoSinkConsumer)是最高级的方法,可让您完全控制发射的值。无需从回调中返回Mono实例(就像在Mono.defer中一样),您可以控制MonoSink<T>,使您可以通过MonoSink.success(),{{1 }},MonoSink.success(value)方法。 Reactor文档包含一些可能的MonoSink.error(throwable)用例的良好示例:link to doc

一般建议是使用功能最弱的抽象来完成这项工作:Mono.create