Class RetryFlow$

java.lang.Object
org.apache.pekko.stream.scaladsl.RetryFlow$

public class RetryFlow$ extends Object
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final RetryFlow$
    Static reference to the singleton instance of this Scala object.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    <In, Out, Mat>
    Flow<In,Out,Mat>
    withBackoff(scala.concurrent.duration.FiniteDuration minBackoff, scala.concurrent.duration.FiniteDuration maxBackoff, double randomFactor, int maxRetries, Flow<In,Out,Mat> flow, scala.Function2<In,Out,scala.Option<In>> decideRetry)
    API may change!
    <In, CtxIn, Out, CtxOut, Mat>
    FlowWithContext<In,CtxIn,Out,CtxOut,Mat>
    withBackoffAndContext(scala.concurrent.duration.FiniteDuration minBackoff, scala.concurrent.duration.FiniteDuration maxBackoff, double randomFactor, int maxRetries, FlowWithContext<In,CtxIn,Out,CtxOut,Mat> flow, scala.Function2<scala.Tuple2<In,CtxIn>,scala.Tuple2<Out,CtxOut>,scala.Option<scala.Tuple2<In,CtxIn>>> decideRetry)
    API may change!

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • MODULE$

      public static final RetryFlow$ MODULE$
      Static reference to the singleton instance of this Scala object.
  • Constructor Details

    • RetryFlow$

      public RetryFlow$()
  • Method Details

    • withBackoff

      public <In, Out, Mat> Flow<In,Out,Mat> withBackoff(scala.concurrent.duration.FiniteDuration minBackoff, scala.concurrent.duration.FiniteDuration maxBackoff, double randomFactor, int maxRetries, Flow<In,Out,Mat> flow, scala.Function2<In,Out,scala.Option<In>> decideRetry)
      API may change!

      Allows retrying individual elements in the stream with an exponential backoff.

      The retry condition is controlled by the decideRetry function. It takes the originally emitted element and the response emitted by flow, and may return a request to be retried.

      The implementation of the RetryFlow requires that flow follows strict first-in-first-out and one-in-one-out semantics, i.e., the Flow may neither filter elements, nor emit more than one element per incoming element. The RetryFlow will fail if two elements are emitted for one incoming element. Any sort of batching, grouping, or filtering will make it hang forever.

      Just one element will be emitted into the flow at any time. Let's say the flow is handling an element, either first-time executing some calculation, or retrying. The next element won't be emitted into the flow until the current element has been finished processing. By finished, it means either succeed the very first attempt, succeed after a few attempts, or get dropped after using up maxRetries retries.

      Parameters:
      minBackoff - minimum duration to backoff between issuing retries
      maxBackoff - maximum duration to backoff between issuing retries
      randomFactor - adds jitter to the retry delay. Use 0 for no jitter
      maxRetries - total number of allowed retries, when reached the last result will be emitted even if unsuccessful
      flow - a flow to retry elements from
      decideRetry - retry condition decision function
    • withBackoffAndContext

      public <In, CtxIn, Out, CtxOut, Mat> FlowWithContext<In,CtxIn,Out,CtxOut,Mat> withBackoffAndContext(scala.concurrent.duration.FiniteDuration minBackoff, scala.concurrent.duration.FiniteDuration maxBackoff, double randomFactor, int maxRetries, FlowWithContext<In,CtxIn,Out,CtxOut,Mat> flow, scala.Function2<scala.Tuple2<In,CtxIn>,scala.Tuple2<Out,CtxOut>,scala.Option<scala.Tuple2<In,CtxIn>>> decideRetry)
      API may change!

      Allows retrying individual elements in the stream with an exponential backoff.

      The retry condition is controlled by the decideRetry function. It takes the originally emitted element with its context, and the response emitted by flow, and may return a request to be retried.

      The implementation of the RetryFlow requires that flow follows one-in-one-out semantics, the FlowWithContext may not filter elements, nor emit more than one element per incoming element. 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.

      The wrapped flow and decideRetry take the additional context parameters which can be a context, or used to control retrying with other information.

      Parameters:
      minBackoff - minimum duration to backoff between issuing retries
      maxBackoff - maximum duration to backoff between issuing retries
      randomFactor - adds jitter to the retry delay. Use 0 for no jitter
      maxRetries - total number of allowed retries, when reached the last result will be emitted even if unsuccessful
      flow - a flow with context to retry elements from
      decideRetry - retry condition decision function