akka.actor
Interface Stash

All Superinterfaces:
Actor, RequiresMessageQueue<DequeBasedMessageQueueSemantics>, UnrestrictedStash
All Known Subinterfaces:
Creators.ActWithStash
All Known Implementing Classes:
UntypedActorWithStash

public interface Stash
extends UnrestrictedStash, RequiresMessageQueue<DequeBasedMessageQueueSemantics>

The Stash trait enables an actor to temporarily stash away messages that can not or should not be handled using the actor's current behavior.

Example:

    class ActorWithProtocol extends Actor with Stash {
      def receive = {
        case "open" ⇒
          unstashAll()
          context.become({
            case "write" ⇒ // do writing...
            case "close" ⇒
              unstashAll()
              context.unbecome()
            case msg ⇒ stash()
          }, discardOld = false)
        case "done" ⇒ // done
        case msg    ⇒ stash()
      }
    }
  

Note that the Stash trait can only be used together with actors that have a deque-based mailbox. By default Stash based actors request a Deque based mailbox since the stash trait extends RequiresMessageQueue[DequeBasedMessageQueueSemantics]. You can override the default mailbox provided when DequeBasedMessageQueueSemantics are requested via config:

    akka.actor.mailbox.requirements {
      "akka.dispatch.BoundedDequeBasedMessageQueueSemantics" = your-custom-mailbox
    }
  
Alternatively, you can add your own requirement marker to the actor and configure a mailbox type to be used for your marker.

For a Stash that also enforces unboundedness of the deque see UnboundedStash. For a Stash that does not enforce any mailbox type see UnrestrictedStash.

Note that the Stash trait must be mixed into (a subclass of) the Actor trait before any trait/class that overrides the preRestart callback. This means it's not possible to write Actor with MyActor with Stash if MyActor overrides preRestart.


Nested Class Summary
 
Nested classes/interfaces inherited from interface akka.actor.Actor
Actor.emptyBehavior$
 
Method Summary
 
Methods inherited from interface akka.actor.UnrestrictedStash
capacity, mailbox, postStop, preRestart, stash, theStash, unstashAll
 
Methods inherited from interface akka.actor.Actor
context, noSender, postRestart, preStart, receive, self, sender, supervisorStrategy, unhandled