Reactive Programming with Reactor 3
Open Source Your Knowledge, Become a Contributor
Technology knowledge has to be shared and made accessible for free. Join the movement.
Mono
Description
A Mono<T>
is a Reactive Streams Publisher
, also augmented with a lot of operators that
can be used to generate, transform, orchestrate Mono sequences.
It is a specialization of Flux
that can emit at most 1 <T>
element: a Mono is either
valued (complete with element), empty (complete without element) or failed (error).
A Mono<Void>
can be used in cases where only the completion signal is interesting (the
Reactive Streams equivalent of a Runnable
task completing).
Like for Flux
, the operators can be used to define an asynchronous pipeline which will be
materialized anew for each Subscription
.
Note that some API that change the sequence's cardinality will return a Flux
(and vice-versa,
APIs that reduce the cardinality to 1 in a Flux
return a Mono
).
See the javadoc here.
Mono
in action:
Mono.firstWithValue(
Mono.just(1).map(integer -> "foo" + integer),
Mono.delay(Duration.ofMillis(100)).thenReturn("bar")
)
.subscribe(System.out::println);
Practice
As for the Flux let's return a empty Mono
using the static factory.
static <T> Mono<T> empty()
// Create a Mono that completes without emitting any item.
Now, we will try to create a Mono
which never emits anything.
Unlike empty()
, it won't even emit an onComplete
event.
Like Flux
, you can create a Mono
from an available (unique) value.
And exactly as we did for the flux, we can propagate exceptions.