package it.tdlight.reactiveapi; import java.util.function.Function; import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; import reactor.core.scheduler.Schedulers; public class FutureEventProducer implements EventProducer { private final Mono> future; public FutureEventProducer(Mono> future) { this.future = future.cache(); } @Override public Mono sendMessages(Flux eventsFlux) { return future.flatMap(ep -> ep.sendMessages(eventsFlux)); } @Override public void close() { future.doOnNext(EventProducer::close).subscribeOn(Schedulers.parallel()).subscribe(); } }