Class TailChoppingGroup

  • All Implemented Interfaces:
    java.io.Serializable, Group, RouterConfig, scala.Equals, scala.Product

    public final class TailChoppingGroup
    extends java.lang.Object
    implements Group, scala.Product, java.io.Serializable
    A router group with retry logic, intended for cases where a return message is expected in response to a message sent to the routee. As each message is sent to the routing group, the routees are randomly ordered. The message is sent to the first routee. If no response is received before the interval has passed, the same message is sent to the next routee. This process repeats until either a response is received from some routee, the routees in the group are exhausted, or the within duration has passed since the first send. If no routee sends a response in time, a pekko.actor.Status.Failure wrapping a pekko.pattern.AskTimeoutException is sent to the sender.

    Refer to pekko.routing.TailChoppingRoutingLogic for comments regarding the goal of this routing algorithm.

    The configuration parameter trumps the constructor arguments. This means that if you provide paths during instantiation they will be ignored if the router is defined in the configuration file for the actor being used.

    param: paths string representation of the actor paths of the routees, messages are sent with pekko.actor.ActorSelection to these paths

    param: within expecting at least one reply within this duration, otherwise it will reply with pekko.pattern.AskTimeoutException in a pekko.actor.Status.Failure

    param: interval duration after which the message will be sent to the next routee

    param: routerDispatcher dispatcher to use for the router head actor, which handles router management messages

    See Also:
    Serialized Form
    • Constructor Summary

      Constructors 
      Constructor Description
      TailChoppingGroup​(com.typesafe.config.Config config)  
      TailChoppingGroup​(java.lang.Iterable<java.lang.String> routeePaths, java.time.Duration within, java.time.Duration interval)
      Java API
      TailChoppingGroup​(java.lang.Iterable<java.lang.String> routeePaths, scala.concurrent.duration.FiniteDuration within, scala.concurrent.duration.FiniteDuration interval)
      Java API
      TailChoppingGroup​(scala.collection.immutable.Iterable<java.lang.String> paths, scala.concurrent.duration.FiniteDuration within, scala.concurrent.duration.FiniteDuration interval, java.lang.String routerDispatcher)  
    • Constructor Detail

      • TailChoppingGroup

        public TailChoppingGroup​(scala.collection.immutable.Iterable<java.lang.String> paths,
                                 scala.concurrent.duration.FiniteDuration within,
                                 scala.concurrent.duration.FiniteDuration interval,
                                 java.lang.String routerDispatcher)
      • TailChoppingGroup

        public TailChoppingGroup​(com.typesafe.config.Config config)
      • TailChoppingGroup

        public TailChoppingGroup​(java.lang.Iterable<java.lang.String> routeePaths,
                                 scala.concurrent.duration.FiniteDuration within,
                                 scala.concurrent.duration.FiniteDuration interval)
        Java API
        Parameters:
        routeePaths - string representation of the actor paths of the routees, messages are sent with pekko.actor.ActorSelection to these paths
        within - expecting at least one reply within this duration, otherwise it will reply with pekko.pattern.AskTimeoutException in a pekko.actor.Status.Failure
        interval - duration after which next routee will be picked
      • TailChoppingGroup

        public TailChoppingGroup​(java.lang.Iterable<java.lang.String> routeePaths,
                                 java.time.Duration within,
                                 java.time.Duration interval)
        Java API
        Parameters:
        routeePaths - string representation of the actor paths of the routees, messages are sent with pekko.actor.ActorSelection to these paths
        within - expecting at least one reply within this duration, otherwise it will reply with pekko.pattern.AskTimeoutException in a pekko.actor.Status.Failure
        interval - duration after which next routee will be picked
    • Method Detail

      • $lessinit$greater$default$4

        public static java.lang.String $lessinit$greater$default$4()
      • apply

        public static TailChoppingGroup apply​(scala.collection.immutable.Iterable<java.lang.String> paths,
                                              scala.concurrent.duration.FiniteDuration within,
                                              scala.concurrent.duration.FiniteDuration interval,
                                              java.lang.String routerDispatcher)
      • apply$default$4

        public static java.lang.String apply$default$4()
      • unapply

        public static scala.Option<scala.Tuple4<scala.collection.immutable.Iterable<java.lang.String>,​scala.concurrent.duration.FiniteDuration,​scala.concurrent.duration.FiniteDuration,​java.lang.String>> unapply​(TailChoppingGroup x$0)
      • paths

        public scala.collection.immutable.Iterable<java.lang.String> paths()
      • within

        public scala.concurrent.duration.FiniteDuration within()
      • interval

        public scala.concurrent.duration.FiniteDuration interval()
      • routerDispatcher

        public java.lang.String routerDispatcher()
        Description copied from interface: RouterConfig
        Dispatcher ID to use for running the &ldquo;head&rdquo; actor, which handles supervision, death watch and router management messages
        Specified by:
        routerDispatcher in interface RouterConfig
      • createRouter

        public Router createRouter​(ActorSystem system)
        Description copied from interface: RouterConfig
        Create the actual router, responsible for routing messages to routees.

        Specified by:
        createRouter in interface RouterConfig
        Parameters:
        system - the ActorSystem this router belongs to
      • paths

        public scala.collection.immutable.Iterable<java.lang.String> paths​(ActorSystem system)
        Specified by:
        paths in interface Group
      • withDispatcher

        public TailChoppingGroup withDispatcher​(java.lang.String dispatcherId)
        Setting the dispatcher to be used for the router head actor, which handles router management messages
      • copy

        public TailChoppingGroup copy​(scala.collection.immutable.Iterable<java.lang.String> paths,
                                      scala.concurrent.duration.FiniteDuration within,
                                      scala.concurrent.duration.FiniteDuration interval,
                                      java.lang.String routerDispatcher)
      • copy$default$1

        public scala.collection.immutable.Iterable<java.lang.String> copy$default$1()
      • copy$default$2

        public scala.concurrent.duration.FiniteDuration copy$default$2()
      • copy$default$3

        public scala.concurrent.duration.FiniteDuration copy$default$3()
      • copy$default$4

        public java.lang.String copy$default$4()
      • productPrefix

        public java.lang.String productPrefix()
        Specified by:
        productPrefix in interface scala.Product
      • productArity

        public int productArity()
        Specified by:
        productArity in interface scala.Product
      • productElement

        public java.lang.Object productElement​(int x$1)
        Specified by:
        productElement in interface scala.Product
      • productIterator

        public scala.collection.Iterator<java.lang.Object> productIterator()
        Specified by:
        productIterator in interface scala.Product
      • canEqual

        public boolean canEqual​(java.lang.Object x$1)
        Specified by:
        canEqual in interface scala.Equals
      • productElementName

        public java.lang.String productElementName​(int x$1)
        Specified by:
        productElementName in interface scala.Product
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • equals

        public boolean equals​(java.lang.Object x$1)
        Specified by:
        equals in interface scala.Equals
        Overrides:
        equals in class java.lang.Object