Interface Repeat<T>
-
- Type Parameters:
T
- Application context type
- All Known Implementing Classes:
DefaultRepeat
public interface Repeat<T> extends Function<Flux<Long>,org.reactivestreams.Publisher<Long>>
Repeat function that may be used withFlux.repeatWhen(Function)
,Mono.repeatWhen(Function)
andMono.repeatWhenEmpty(Function)
.Each change in configuration returns a new instance (copy configuration), which makes
Repeat
suitable for creating configuration templates that can be fine tuned for specific cases without impacting the original general use-case configuration.Example usage:
repeat = Repeat.times(10) .randomBackoff(Duration.ofMillis(100), Duration.ofSeconds(60)) .withApplicationContext(appContext) .doOnRepeat(context -> context.applicationContext().rollback()); flux.repeatWhen(repeat);
-
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Default Methods Modifier and Type Method Description default <S> Flux<S>
apply(org.reactivestreams.Publisher<S> source)
Transforms the source into a repeatingFlux
based on the properties configured for this function.Repeat<T>
backoff(Backoff backoff)
Returns a repeat function with backoff delay.static <T> Repeat<T>
create(Predicate<? super RepeatContext<T>> predicate, long n)
Repeat function that repeats n times, only if the predicate returns true.Repeat<T>
doOnRepeat(Consumer<? super RepeatContext<T>> onRepeat)
Returns a repeat function that invokes the provided onRepeat callback before every repeat.default Repeat<T>
exponentialBackoff(Duration firstBackoff, Duration maxBackoff)
Returns a repeat function with exponential backoff delay.default Repeat<T>
exponentialBackoffWithJitter(Duration firstBackoff, Duration maxBackoff)
Returns a repeat function with full jitter backoff strategy.default Repeat<T>
fixedBackoff(Duration backoffInterval)
Returns a repeat function with fixed backoff delay.Repeat<T>
jitter(Jitter jitter)
Returns a repeat function that applies jitter to the backoff delay.default Repeat<T>
noBackoff()
Returns a repeat function with no backoff delay.static <T> Repeat<T>
once()
Repeat function that repeats once.static <T> Repeat<T>
onlyIf(Predicate<? super RepeatContext<T>> predicate)
Repeat function that repeats only if the predicate returns true.default Repeat<T>
randomBackoff(Duration firstBackoff, Duration maxBackoff)
Returns a repeat function with random de-correlated jitter backoff strategy.Repeat<T>
repeatMax(long maxRepeats)
Returns a repeat function that repeats at most n times.Repeat<T>
timeout(Duration timeout)
Returns a repeat function with timeout.static <T> Repeat<T>
times(long n)
Repeat function that repeats n times.Repeat<T>
withApplicationContext(T applicationContext)
Returns a repeat function with an application context that may be used to perform any rollbacks before a repeat.Repeat<T>
withBackoffScheduler(Scheduler scheduler)
Returns a repeat function that uses the scheduler provided for backoff delays.
-
-
-
Method Detail
-
onlyIf
static <T> Repeat<T> onlyIf(Predicate<? super RepeatContext<T>> predicate)
Repeat function that repeats only if the predicate returns true.- Parameters:
predicate
- Predicate that determines if next repeat is performed- Returns:
- Repeat function with predicate
-
once
static <T> Repeat<T> once()
Repeat function that repeats once.- Returns:
- Repeat function for one repeat
-
times
static <T> Repeat<T> times(long n)
Repeat function that repeats n times.- Parameters:
n
- number of repeats- Returns:
- Repeat function for n repeats
-
create
static <T> Repeat<T> create(Predicate<? super RepeatContext<T>> predicate, long n)
Repeat function that repeats n times, only if the predicate returns true.- Parameters:
predicate
- Predicate that determines if next repeat is performedn
- number of repeats- Returns:
- Repeat function with predicate and n repeats
-
withApplicationContext
Repeat<T> withApplicationContext(T applicationContext)
Returns a repeat function with an application context that may be used to perform any rollbacks before a repeat. This application context is provided to any repeat predicateonlyIf(Predicate)
, custom backoff functionbackoff(Backoff)
and repeat callbackdoOnRepeat(Consumer)
. All other properties of this repeat function are retained in the returned instance.- Parameters:
applicationContext
- Application context- Returns:
- repeat function with associated application context
-
doOnRepeat
Repeat<T> doOnRepeat(Consumer<? super RepeatContext<T>> onRepeat)
Returns a repeat function that invokes the provided onRepeat callback before every repeat. TheRepeatContext
provided to the callback contains the iteration and the any application context set usingwithApplicationContext(Object)
. All other properties of this repeat function are retained in the returned instance.- Parameters:
onRepeat
- callback to invoke before repeats- Returns:
- repeat function with callback
-
timeout
Repeat<T> timeout(Duration timeout)
Returns a repeat function with timeout. The timeout starts from the instant that this function is applied and switches to unlimited number of attempts. All other properties of this repeat function are retained in the returned instance.- Parameters:
timeout
- timeout after which no new repeats are initiated- Returns:
- repeat function with timeout
-
repeatMax
Repeat<T> repeatMax(long maxRepeats)
Returns a repeat function that repeats at most n times. All other properties of this repeat function are retained in the returned instance.- Parameters:
maxRepeats
- number of repeats- Returns:
- Retry function for n repeats
-
backoff
Repeat<T> backoff(Backoff backoff)
Returns a repeat function with backoff delay. All other properties of this repeat function are retained in the returned instance.- Parameters:
backoff
- the backoff function to determine backoff delay- Returns:
- repeat function with backoff
-
jitter
Repeat<T> jitter(Jitter jitter)
Returns a repeat function that applies jitter to the backoff delay. All other properties of this repeat function are retained in the returned instance.- Parameters:
jitter
- Jitter function to randomize backoff delay- Returns:
- repeat function with jitter for backoff
-
withBackoffScheduler
Repeat<T> withBackoffScheduler(Scheduler scheduler)
Returns a repeat function that uses the scheduler provided for backoff delays. All other properties of this repeat function are retained in the returned instance.- Parameters:
scheduler
- the scheduler for backoff delays- Returns:
- repeat function with backoff scheduler
-
noBackoff
default Repeat<T> noBackoff()
Returns a repeat function with no backoff delay. This is the default. All other properties of this repeat function are retained in the returned instance.- Returns:
- repeat function with no backoff delay
-
fixedBackoff
default Repeat<T> fixedBackoff(Duration backoffInterval)
Returns a repeat function with fixed backoff delay. All other properties of this repeat function are retained in the returned instance.- Parameters:
backoffInterval
- fixed backoff delay applied before every repeat- Returns:
- repeat function with fixed backoff delay
-
exponentialBackoff
default Repeat<T> exponentialBackoff(Duration firstBackoff, Duration maxBackoff)
Returns a repeat function with exponential backoff delay. All other properties of this repeat function are retained in the returned instance.Repeats are performed after a backoff interval of
firstBackoff * (2 ** n)
where n is the next iteration number. IfmaxBackoff
is not null, the maximum backoff applied will be limited tomaxBackoff
.- Parameters:
firstBackoff
- the delay for the first backoff, which is also used as the coefficient for subsequent backoffsmaxBackoff
- the maximum backoff delay before a repeat- Returns:
- repeat function with exponential backoff delay
-
exponentialBackoffWithJitter
default Repeat<T> exponentialBackoffWithJitter(Duration firstBackoff, Duration maxBackoff)
Returns a repeat function with full jitter backoff strategy. All other properties of this repeat function are retained in the returned instance.Repeats are performed after a random backoff interval between
firstBackoff
andfirstBackoff * (2 ** n)
where n is the next iteration number. IfmaxBackoff
is not null, the maximum backoff applied will be limited tomaxBackoff
.- Parameters:
firstBackoff
- the delay for the first backoff, which is also used as the coefficient for subsequent backoffsmaxBackoff
- the maximum backoff delay before a repeat- Returns:
- repeat function with full jitter backoff strategy
-
randomBackoff
default Repeat<T> randomBackoff(Duration firstBackoff, Duration maxBackoff)
Returns a repeat function with random de-correlated jitter backoff strategy. All other properties of this repeat function are retained in the returned instance.Repeats are performed after a backoff interval of
random_between(firstBackoff, prevBackoff * 3)
, with a minimum value offirstBackoff
. IfmaxBackoff
is not null, the maximum backoff applied will be limited tomaxBackoff
.- Parameters:
firstBackoff
- the delay for the first backoff, also used as minimum backoffmaxBackoff
- the maximum backoff delay before a repeat- Returns:
- repeat function with de-correlated jitter backoff strategy
-
apply
default <S> Flux<S> apply(org.reactivestreams.Publisher<S> source)
Transforms the source into a repeatingFlux
based on the properties configured for this function.Example usage:
repeat = Repeat.times(n) .exponentialBackoff(Duration.ofMillis(100), Duration.ofSeconds(60)); flux.as(repeat);
- Parameters:
source
- the source publisher- Returns:
Flux
with the repeat properties of this repeat function
-
-