code: public final Disposable subscribe(
  			@Nullable Consumer<? super T> consumer,
  			@Nullable Consumer<? super Throwable> errorConsumer,
  			@Nullable Runnable completeConsumer) {
  		return subscribe(consumer, errorConsumer, completeConsumer, null);
  	}
docs: 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}