Class TailChoppingPool
- All Implemented Interfaces:
Serializable,Pool,PoolOverrideUnsetConfig<TailChoppingPool>,RouterConfig,scala.Equals,scala.Product
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 pool 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 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: resizer optional resizer that dynamically adjust the pool size
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: 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 Summary
ConstructorsConstructorDescriptionTailChoppingPool(int nr, Duration within, Duration interval) Java APITailChoppingPool(int nr, scala.concurrent.duration.FiniteDuration within, scala.concurrent.duration.FiniteDuration interval) Java APITailChoppingPool(int nrOfInstances, scala.Option<Resizer> resizer, scala.concurrent.duration.FiniteDuration within, scala.concurrent.duration.FiniteDuration interval, SupervisorStrategy supervisorStrategy, String routerDispatcher, boolean usePoolDispatcher) TailChoppingPool(com.typesafe.config.Config config) -
Method Summary
Modifier and TypeMethodDescriptionstatic scala.Option<Resizer>static SupervisorStrategystatic Stringstatic booleanstatic TailChoppingPoolapply(int nrOfInstances, scala.Option<Resizer> resizer, scala.concurrent.duration.FiniteDuration within, scala.concurrent.duration.FiniteDuration interval, SupervisorStrategy supervisorStrategy, String routerDispatcher, boolean usePoolDispatcher) static scala.Option<Resizer>static SupervisorStrategystatic Stringstatic booleanbooleancopy(int nrOfInstances, scala.Option<Resizer> resizer, scala.concurrent.duration.FiniteDuration within, scala.concurrent.duration.FiniteDuration interval, SupervisorStrategy supervisorStrategy, String routerDispatcher, boolean usePoolDispatcher) intscala.Option<Resizer>scala.concurrent.duration.FiniteDurationscala.concurrent.duration.FiniteDurationbooleancreateRouter(ActorSystem system) Create the actual router, responsible for routing messages to routees.booleaninthashCode()scala.concurrent.duration.FiniteDurationinterval()intintnrOfInstances(ActorSystem sys) Initial number of routee instancesintproductElement(int x$1) productElementName(int x$1) scala.collection.Iterator<Object>scala.Option<Resizer>resizer()Pool with dynamically resizable number of routees return thepekko.routing.Resizerto use.Dispatcher ID to use for running the “head” actor, which handles supervision, death watch and router management messagesSupervisorStrategy for the head actor, i.e.toString()static scala.Option<scala.Tuple7<Object,scala.Option<Resizer>, scala.concurrent.duration.FiniteDuration, scala.concurrent.duration.FiniteDuration, SupervisorStrategy, String, Object>> unapply(TailChoppingPool x$0) booleanUse a dedicated dispatcher for the routees of the pool.withDispatcher(String dispatcherId) Setting the dispatcher to be used for the router head actor, which handles supervision, death watch and router management messages.withFallback(RouterConfig other) Uses the resizer and/or the supervisor strategy of the given RouterConfig if this RouterConfig doesn't have one, i.e.scala.concurrent.duration.FiniteDurationwithin()withResizer(Resizer resizer) Setting the resizer to be used.withSupervisorStrategy(SupervisorStrategy strategy) Setting the supervisor strategy to be used for the “head” Router actor.Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface org.apache.pekko.routing.Pool
createRouterActor, enrichWithPoolDispatcher, newRoutee, props, stopRouterWhenAllRouteesRemovedMethods inherited from interface org.apache.pekko.routing.PoolOverrideUnsetConfig
overrideUnsetConfigMethods inherited from interface scala.Product
productElementNamesMethods inherited from interface org.apache.pekko.routing.RouterConfig
isManagementMessage, routingLogicController, verifyConfig
-
Constructor Details
-
TailChoppingPool
public TailChoppingPool(int nrOfInstances, scala.Option<Resizer> resizer, scala.concurrent.duration.FiniteDuration within, scala.concurrent.duration.FiniteDuration interval, SupervisorStrategy supervisorStrategy, String routerDispatcher, boolean usePoolDispatcher) -
TailChoppingPool
public TailChoppingPool(com.typesafe.config.Config config) -
TailChoppingPool
public TailChoppingPool(int nr, scala.concurrent.duration.FiniteDuration within, scala.concurrent.duration.FiniteDuration interval) Java API- Parameters:
nr- initial number of routees in the poolwithin- expecting at least one reply within this duration, otherwise it will reply withpekko.pattern.AskTimeoutExceptionin apekko.actor.Status.Failureinterval- duration after which next routee will be picked
-
TailChoppingPool
Java API- Parameters:
nr- initial number of routees in the poolwithin- expecting at least one reply within this duration, otherwise it will reply withpekko.pattern.AskTimeoutExceptionin apekko.actor.Status.Failureinterval- duration after which next routee will be picked
-
-
Method Details
-
$lessinit$greater$default$2
-
$lessinit$greater$default$5
-
$lessinit$greater$default$6
-
$lessinit$greater$default$7
public static boolean $lessinit$greater$default$7() -
apply
public static TailChoppingPool apply(int nrOfInstances, scala.Option<Resizer> resizer, scala.concurrent.duration.FiniteDuration within, scala.concurrent.duration.FiniteDuration interval, SupervisorStrategy supervisorStrategy, String routerDispatcher, boolean usePoolDispatcher) -
apply$default$2
-
apply$default$5
-
apply$default$6
-
apply$default$7
public static boolean apply$default$7() -
unapply
public static scala.Option<scala.Tuple7<Object,scala.Option<Resizer>, unapplyscala.concurrent.duration.FiniteDuration, scala.concurrent.duration.FiniteDuration, SupervisorStrategy, String, Object>> (TailChoppingPool x$0) -
nrOfInstances
public int nrOfInstances() -
resizer
Description copied from interface:PoolPool with dynamically resizable number of routees return thepekko.routing.Resizerto use. The resizer is invoked once when the router is created, before any messages can be sent to it. Resize is also triggered when messages are sent to the routees, and the resizer is invoked asynchronously, i.e. not necessarily before the message has been sent. -
within
public scala.concurrent.duration.FiniteDuration within() -
interval
public scala.concurrent.duration.FiniteDuration interval() -
supervisorStrategy
Description copied from interface:PoolSupervisorStrategy for the head actor, i.e. for supervising the routees of the pool.- Specified by:
supervisorStrategyin interfacePool
-
routerDispatcher
Description copied from interface:RouterConfigDispatcher ID to use for running the “head” actor, which handles supervision, death watch and router management messages- Specified by:
routerDispatcherin interfaceRouterConfig
-
usePoolDispatcher
public boolean usePoolDispatcher()Description copied from interface:PoolUse a dedicated dispatcher for the routees of the pool. The dispatcher is defined in 'pool-dispatcher' configuration property in the deployment section of the router.- Specified by:
usePoolDispatcherin interfacePool
-
createRouter
Description copied from interface:RouterConfigCreate the actual router, responsible for routing messages to routees.- Specified by:
createRouterin interfaceRouterConfig- Parameters:
system- the ActorSystem this router belongs to
-
nrOfInstances
Description copied from interface:PoolInitial number of routee instances- Specified by:
nrOfInstancesin interfacePool
-
withSupervisorStrategy
Setting the supervisor strategy to be used for the “head” Router actor.- Specified by:
withSupervisorStrategyin interfacePoolOverrideUnsetConfig<TailChoppingPool>
-
withResizer
Setting the resizer to be used.- Specified by:
withResizerin interfacePoolOverrideUnsetConfig<TailChoppingPool>
-
withDispatcher
Setting the dispatcher to be used for the router head actor, which handles supervision, death watch and router management messages. -
withFallback
Uses the resizer and/or the supervisor strategy of the given RouterConfig if this RouterConfig doesn't have one, i.e. the resizer defined in code is used if resizer was not defined in config.- Specified by:
withFallbackin interfaceRouterConfig
-
copy
public TailChoppingPool copy(int nrOfInstances, scala.Option<Resizer> resizer, scala.concurrent.duration.FiniteDuration within, scala.concurrent.duration.FiniteDuration interval, SupervisorStrategy supervisorStrategy, String routerDispatcher, boolean usePoolDispatcher) -
copy$default$1
public int copy$default$1() -
copy$default$2
-
copy$default$3
public scala.concurrent.duration.FiniteDuration copy$default$3() -
copy$default$4
public scala.concurrent.duration.FiniteDuration copy$default$4() -
copy$default$5
-
copy$default$6
-
copy$default$7
public boolean copy$default$7() -
productPrefix
- Specified by:
productPrefixin interfacescala.Product
-
productArity
public int productArity()- Specified by:
productArityin interfacescala.Product
-
productElement
- Specified by:
productElementin interfacescala.Product
-
productIterator
- Specified by:
productIteratorin interfacescala.Product
-
canEqual
- Specified by:
canEqualin interfacescala.Equals
-
productElementName
- Specified by:
productElementNamein interfacescala.Product
-
hashCode
public int hashCode() -
toString
-
equals
-