Package akka.actor

Class AbstractActorWithStash

  • All Implemented Interfaces:
    Actor, Stash, StashSupport, UnrestrictedStash, RequiresMessageQueue<DequeBasedMessageQueueSemantics>

    public abstract class AbstractActorWithStash
    extends AbstractActor
    implements Stash
    Java API: compatible with lambda expressions

    Actor base class that should be extended to create an actor with a stash.

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

    Example:
     public class MyActorWithStash extends AbstractActorWithStash {
       int count = 0;
    
       public MyActorWithStash() {
         receive(ReceiveBuilder. match(String.class, s -> {
           if (count < 0) {
             sender().tell(new Integer(s.length()), self());
           } else if (count == 2) {
             count = -1;
             unstashAll();
           } else {
             count += 1;
             stash();
           }}).build()
         );
       }
     }
     
    Note that the subclasses of AbstractActorWithStash by default request a Deque based mailbox since this class implements the RequiresMessageQueue&lt;DequeBasedMessageQueueSemantics&gt; marker interface. 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 based actor that enforces unbounded deques see AbstractActorWithUnboundedStash. There is also an unrestricted version AbstractActorWithUnrestrictedStash that does not enforce the mailbox type.