public static Function<Flux<Throwable>, Publisher<?>> exponentialBackOffError(Duration minimum, Duration maximum, Duration timeout) {
        Instant finish = Instant.now().plus(timeout);
        return errors -> getDelay(minimum, maximum, finish, errors.zipWith(Flux.range(0, Integer.MAX_VALUE), (error, iteration) -> iteration.longValue()));
    }
public static Function < Flux < Throwable > , Publisher < ? > > exponentialBackOffError ( Duration minimum , Duration maximum , Duration timeout ) { Instant finish = Instant . now ( ) . plus ( timeout ) ; return errors -> getDelay ( minimum , maximum , finish , errors . zipWith ( Flux . range ( 0 , Integer . MAX_VALUE ) , ( error , iteration ) -> iteration . longValue ( ) ) ) ; }
Implements an exponential backoff delay for use with {@link Mono#retryWhen(Function)}

@param minimum the minimum duration
@param maximum the maximum duration
@param timeout the maximum amount of time to delay for
@return a delayed {@link Publisher}