Class BalancingPool

java.lang.Object
org.apache.pekko.routing.BalancingPool
All Implemented Interfaces:
Serializable, Pool, RouterConfig, scala.Equals, scala.Product

public final class BalancingPool extends Object implements Pool, scala.Product, Serializable
A router pool that will try to redistribute work from busy routees to idle routees. All routees share the same mailbox.

Although the technique used in this implementation is commonly known as "work stealing", the actual implementation is probably best described as "work donating" because the actor of which work is being stolen takes the initiative.

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

Supervision Setup

Any routees that are created by a router will be created as the router's children. The router is therefore also the children's supervisor.

The supervision strategy of the router actor can be configured with withSupervisorStrategy(org.apache.pekko.actor.SupervisorStrategy). If no strategy is provided, routers default to a strategy of “always escalate”. This means that errors are passed up to the router's supervisor for handling.

The router's supervisor will treat the error as an error with the router itself. Therefore a directive to stop or restart will cause the router itself to stop or restart. The router, in turn, will cause its children to stop and restart.

param: nrOfInstances initial number of routees in the pool

param: supervisorStrategy strategy for supervising the routees, see 'Supervision Setup'

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

See Also:
  • Constructor Details

    • BalancingPool

      public BalancingPool(int nrOfInstances, SupervisorStrategy supervisorStrategy, String routerDispatcher)
    • BalancingPool

      public BalancingPool(com.typesafe.config.Config config)
    • BalancingPool

      public BalancingPool(int nr)
      Java API
      Parameters:
      nr - initial number of routees in the pool
  • Method Details

    • $lessinit$greater$default$2

      public static SupervisorStrategy $lessinit$greater$default$2()
    • $lessinit$greater$default$3

      public static String $lessinit$greater$default$3()
    • apply

      public static BalancingPool apply(int nrOfInstances, SupervisorStrategy supervisorStrategy, String routerDispatcher)
    • apply$default$2

      public static SupervisorStrategy apply$default$2()
    • apply$default$3

      public static String apply$default$3()
    • unapply

      public static scala.Option<scala.Tuple3<Object,SupervisorStrategy,String>> unapply(BalancingPool x$0)
    • nrOfInstances

      public int nrOfInstances()
    • supervisorStrategy

      public SupervisorStrategy supervisorStrategy()
      Description copied from interface: Pool
      SupervisorStrategy for the head actor, i.e. for supervising the routees of the pool.
      Specified by:
      supervisorStrategy in interface Pool
    • routerDispatcher

      public 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
    • withSupervisorStrategy

      public BalancingPool withSupervisorStrategy(SupervisorStrategy strategy)
      Setting the supervisor strategy to be used for the &ldquo;head&rdquo; Router actor.
    • withDispatcher

      public BalancingPool withDispatcher(String dispatcherId)
      Setting the dispatcher to be used for the router head actor, which handles supervision, death watch and router management messages.
    • nrOfInstances

      public int nrOfInstances(ActorSystem sys)
      Description copied from interface: Pool
      Initial number of routee instances
      Specified by:
      nrOfInstances in interface Pool
    • withFallback

      public RouterConfig withFallback(RouterConfig other)
      Uses the supervisor strategy of the given RouterConfig if this RouterConfig doesn't have one.
      Specified by:
      withFallback in interface RouterConfig
    • resizer

      public scala.Option<Resizer> resizer()
      Resizer cannot be used together with BalancingPool
      Specified by:
      resizer in interface Pool
    • copy

      public BalancingPool copy(int nrOfInstances, SupervisorStrategy supervisorStrategy, String routerDispatcher)
    • copy$default$1

      public int copy$default$1()
    • copy$default$2

      public SupervisorStrategy copy$default$2()
    • copy$default$3

      public String copy$default$3()
    • productPrefix

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

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

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

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

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

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

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

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

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