Mono.Defer () против Mono.create () против Mono.just ()? - PullRequest
1 голос
/ 13 мая 2019

Может ли кто-нибудь помочь мне понять разницу между Mono.defer (), Mono.create () и Mono.just ()? Как правильно его использовать?

1 Ответ

5 голосов
/ 13 мая 2019

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.

...