Flux, an Asynchronous Sequence of 0-N Items
The following image shows how a Flux transforms items:
A Flux<T> is a standard Publisher<T> that represents an asynchronous sequence of 0 to N
emitted items, optionally terminated by either a completion signal or an error.
As in the Reactive Streams spec, these three types of signal translate to calls to a downstream
Subscriber’s onNext, onComplete, and onError methods.
With this large scope of possible signals, Flux is the general-purpose reactive type.
Note that all events, even terminating ones, are optional: no onNext event but an
onComplete event represents an empty finite sequence, but remove the onComplete and
you have an infinite empty sequence (not particularly useful, except for tests around cancellation).
Similarly, infinite sequences are not necessarily empty. For example, Flux.interval(Duration)
produces a Flux<Long> that is infinite and emits regular ticks from a clock.