Mono.just(value)
является самым примитивным - когда у вас есть значение, вы можете обернуть его в моно и подписчики получат его.
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
вариантов использования: ссылка на документ .
Общий совет заключается в использовании наименее мощной абстракции для выполнения работы: Mono.just -> Mono.defer -> Mono.create
.