final case class TailChoppingRoutingLogic(scheduler: Scheduler, within: FiniteDuration, interval: FiniteDuration, context: ExecutionContext) extends RoutingLogic with Product with Serializable
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 the within 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.
- scheduler
- schedules sending messages to routees 
- within
- expecting at least one reply within this duration, otherwise it will reply with akka.pattern.AskTimeoutException in a akka.actor.Status.Failure 
- interval
- duration after which the message will be sent to the next routee 
- context
- execution context used by scheduler 
- Annotations
- @SerialVersionUID()
- Source
- TailChopping.scala
- Alphabetic
- By Inheritance
- TailChoppingRoutingLogic
- Serializable
- Serializable
- Product
- Equals
- RoutingLogic
- NoSerializationVerificationNeeded
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Instance Constructors
- 
      
      
      
        
      
    
      
        
        new
      
      
        TailChoppingRoutingLogic(scheduler: Scheduler, within: FiniteDuration, interval: FiniteDuration, context: ExecutionContext)
      
      
      - scheduler
- schedules sending messages to routees 
- within
- expecting at least one reply within this duration, otherwise it will reply with akka.pattern.AskTimeoutException in a akka.actor.Status.Failure 
- interval
- duration after which the message will be sent to the next routee 
- context
- execution context used by scheduler 
 
Value Members
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        !=(arg0: Any): Boolean
      
      
      - Definition Classes
- AnyRef → Any
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        ##(): Int
      
      
      - Definition Classes
- AnyRef → Any
 
- 
      
      
      
        
      
    
      
        
        def
      
      
        +(other: String): String
      
      
      - Implicit
- This member is added by an implicit conversion from TailChoppingRoutingLogic to any2stringadd[TailChoppingRoutingLogic] performed by method any2stringadd in scala.Predef.
- Definition Classes
- any2stringadd
 
- 
      
      
      
        
      
    
      
        
        def
      
      
        ->[B](y: B): (TailChoppingRoutingLogic, B)
      
      
      - Implicit
- This member is added by an implicit conversion from TailChoppingRoutingLogic to ArrowAssoc[TailChoppingRoutingLogic] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        ==(arg0: Any): Boolean
      
      
      - Definition Classes
- AnyRef → Any
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        asInstanceOf[T0]: T0
      
      
      - Definition Classes
- Any
 
- 
      
      
      
        
      
    
      
        
        def
      
      
        clone(): AnyRef
      
      
      - Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate() @throws( ... )
 
-  val context: ExecutionContext
- 
      
      
      
        
      
    
      
        
        def
      
      
        ensuring(cond: (TailChoppingRoutingLogic) ⇒ Boolean, msg: ⇒ Any): TailChoppingRoutingLogic
      
      
      - Implicit
- This member is added by an implicit conversion from TailChoppingRoutingLogic to Ensuring[TailChoppingRoutingLogic] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
 
- 
      
      
      
        
      
    
      
        
        def
      
      
        ensuring(cond: (TailChoppingRoutingLogic) ⇒ Boolean): TailChoppingRoutingLogic
      
      
      - Implicit
- This member is added by an implicit conversion from TailChoppingRoutingLogic to Ensuring[TailChoppingRoutingLogic] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
 
- 
      
      
      
        
      
    
      
        
        def
      
      
        ensuring(cond: Boolean, msg: ⇒ Any): TailChoppingRoutingLogic
      
      
      - Implicit
- This member is added by an implicit conversion from TailChoppingRoutingLogic to Ensuring[TailChoppingRoutingLogic] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
 
- 
      
      
      
        
      
    
      
        
        def
      
      
        ensuring(cond: Boolean): TailChoppingRoutingLogic
      
      
      - Implicit
- This member is added by an implicit conversion from TailChoppingRoutingLogic to Ensuring[TailChoppingRoutingLogic] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        eq(arg0: AnyRef): Boolean
      
      
      - Definition Classes
- AnyRef
 
- 
      
      
      
        
      
    
      
        
        def
      
      
        formatted(fmtstr: String): String
      
      
      - Implicit
- This member is added by an implicit conversion from TailChoppingRoutingLogic to StringFormat[TailChoppingRoutingLogic] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @inline()
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        getClass(): Class[_]
      
      
      - Definition Classes
- AnyRef → Any
- Annotations
- @native() @HotSpotIntrinsicCandidate()
 
-  val interval: FiniteDuration
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        isInstanceOf[T0]: Boolean
      
      
      - Definition Classes
- Any
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        ne(arg0: AnyRef): Boolean
      
      
      - Definition Classes
- AnyRef
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        notify(): Unit
      
      
      - Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        notifyAll(): Unit
      
      
      - Definition Classes
- AnyRef
- Annotations
- @native() @HotSpotIntrinsicCandidate()
 
-  val scheduler: Scheduler
- 
      
      
      
        
      
    
      
        
        def
      
      
        select(message: Any, routees: IndexedSeq[Routee]): Routee
      
      
      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 theIndexedSeq.- Definition Classes
- TailChoppingRoutingLogic → RoutingLogic
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        synchronized[T0](arg0: ⇒ T0): T0
      
      
      - Definition Classes
- AnyRef
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        wait(arg0: Long, arg1: Int): Unit
      
      
      - Definition Classes
- AnyRef
- Annotations
- @throws( ... )
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        wait(arg0: Long): Unit
      
      
      - Definition Classes
- AnyRef
- Annotations
- @native() @throws( ... )
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        wait(): Unit
      
      
      - Definition Classes
- AnyRef
- Annotations
- @throws( ... )
 
-  val within: FiniteDuration
- 
      
      
      
        
      
    
      
        
        def
      
      
        →[B](y: B): (TailChoppingRoutingLogic, B)
      
      
      - Implicit
- This member is added by an implicit conversion from TailChoppingRoutingLogic to ArrowAssoc[TailChoppingRoutingLogic] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc