reactor-core/src/main/java/reactor/core/publisher/Flux.java
public static <T> Flux<T> push(Consumer<? super FluxSink<T>> emitter) {
		return onAssembly(new FluxCreate<>(emitter, OverflowStrategy.BUFFER, FluxCreate.CreateMode.PUSH_ONLY));
	}
public static <T> Flux<T> push(Consumer<? super FluxSink<T>> emitter) {
		return onAssembly(new FluxCreate<>(emitter, OverflowStrategy.BUFFER, FluxCreate.CreateMode.PUSH_ONLY));
	}
Programmatically create a {@link Flux} with the capability of emitting multiple
elements from a single-threaded producer through the {@link FluxSink} API. For
a multi-threaded capable alternative, see {@link #create(Consumer)}.
<p>
<img class="marble" src="doc-files/marbles/push.svg" alt="">
<p>
This Flux factory is useful if one wants to adapt some other single-threaded
multi-valued async API and not worry about cancellation and backpressure (which is
handled by buffering all signals if the downstream can't keep up).
<p>
For example:

<pre><code>
Flux.&lt;String&gt;push(emitter -&gt; {

ActionListener al = e -&gt; {
emitter.next(textField.getText());
};
// without cleanup support:

button.addActionListener(al);

// with cleanup support:

button.addActionListener(al);
emitter.onDispose(() -> {
button.removeListener(al);
});
});
</code></pre>

@reactor.discard The {@link FluxSink} exposed by this operator buffers in case of
overflow. The buffer is discarded when the main sequence is cancelled.

@param <T> The type of values in the sequence
@param emitter Consume the {@link FluxSink} provided per-subscriber by Reactor to generate signals.
@return a {@link Flux}
@see #create(Consumer)