schedules sending messages to routees
expecting at least one reply within this duration, otherwise it will reply with akka.pattern.AskTimeoutException in a akka.actor.Status.Failure
duration after which the message will be sent to the next routee
execution context used by scheduler
execution context used by scheduler
duration after which the message will be sent to the next routee
schedules sending messages to routees
Pick the destination for a given message.
Pick the destination for a given message. Normally it picks one of the
passed routees
, but in the end it is up to the implementation to
return whatever Routee to use for sending a specific message.
When implemented from Java it can be good to know that
routees.apply(index)
can be used to get an element
from the IndexedSeq
.
expecting at least one reply within this duration, otherwise it will reply with akka.pattern.AskTimeoutException in a akka.actor.Status.Failure
As each message is sent to the router, 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 pool are exhausted, or thewithin
duration has passed since the first send. If no routee sends a response in time, a akka.actor.Status.Failure wrapping a akka.pattern.AskTimeoutException is sent to the sender.The goal of this routing algorithm is to decrease tail latencies ("chop off the tail latency") in situations where multiple routees can perform the same piece of work, and where a routee may occasionally respond more slowly than expected. In this case, sending the same work request (also known as a "backup request") to another actor results in decreased response time - because it's less probable that multiple actors are under heavy load simultaneously. This technique is explained in depth in Jeff Dean's presentation on Achieving Rapid Response Times in Large Online Services.
schedules sending messages to routees
expecting at least one reply within this duration, otherwise it will reply with akka.pattern.AskTimeoutException in a akka.actor.Status.Failure
duration after which the message will be sent to the next routee
execution context used by scheduler