Wrap the given
Flow and retry individual elements in that stream with an exponential backoff. A decider function tests every emitted element and can return a new element to be sent to the wrapped flow for another try.
def withBackoff[In, Out, Mat](minBackoff: FiniteDuration,maxBackoff: FiniteDuration,randomFactor: Double,maxRetries: Int,flow: Flow[In, Out, Mat])(decideRetry: (In, Out) => Option[In]): Flow[In, Out, Mat]
When an element is emitted by the wrapped
flow it is passed to the
decideRetry function, which may return an element to retry in the
The retry backoff is controlled by the
randomFactor parameters. At most
maxRetries will be made after the initial try.
flow must have one-in one-out semantics. It may not filter, nor duplicate elements. The
RetryFlow will fail if two elements are emitted from the
flow, it will be stuck “forever” if nothing is emitted. Just one element will be emitted into the
flow at any time. The
flow needs to emit an element before the next will be emitted to it.
Elements are retried as long as
maxRetries is not reached and the
decideRetry function returns a new element to be sent to
decideRetry function gets passed in the original element sent to the
flow and the element emitted by it. When
Optional.empty, no retries will be issued, and the response will be emitted downstream.
This API was added in Akka 2.6.0 and may be changed in further patch releases.
This example wraps a
Integers, and retries elements unless the result is 0 or negative, or
maxRetries is hit.
emits when the wrapped flow emits, and either
maxRetries is reached or
backpressures during backoff, when the wrapped flow backpressures, or when downstream backpressures
completes when upstream or the wrapped flow completes
cancels when downstream or the wrapped flow cancels