reactor-core/src/main/java/reactor/core/publisher/Flux.java
public final Disposable subscribe(
			@Nullable Consumer<? super T> consumer,
			@Nullable Consumer<? super Throwable> errorConsumer,
			@Nullable Runnable completeConsumer) {
		return subscribe(consumer, errorConsumer, completeConsumer, null);
	}
public final Disposable subscribe(
			@Nullable Consumer<? super T> consumer,
			@Nullable Consumer<? super Throwable> errorConsumer,
			@Nullable Runnable completeConsumer) {
		return subscribe(consumer, errorConsumer, completeConsumer, null);
	}
Subscribe {@link Consumer} to this {@link Flux} that will respectively consume all the
elements in the sequence, handle errors and react to completion. The subscription
will request unbounded demand ({@code Long.MAX_VALUE}).
<p>
For a passive version that observe and forward incoming data see {@link #doOnNext(java.util.function.Consumer)},
{@link #doOnError(java.util.function.Consumer)} and {@link #doOnComplete(Runnable)}.
<p>For a version that gives you more control over backpressure and the request, see
{@link #subscribe(Subscriber)} with a {@link BaseSubscriber}.
<p>
Keep in mind that since the sequence can be asynchronous, this will immediately
return control to the calling thread. This can give the impression the consumer is
not invoked when executing in a main thread or a unit test for instance.

<p>
<img class="marble" src="doc-files/marbles/subscribeWithOnNextAndOnErrorAndOnCompleteForFlux.svg" alt="">

@param consumer the consumer to invoke on each value
@param errorConsumer the consumer to invoke on error signal
@param completeConsumer the consumer to invoke on complete signal

@return a new {@link Disposable} that can be used to cancel the underlying {@link Subscription}