Class AbstractActorWithStash

java.lang.Object
org.apache.pekko.actor.AbstractActor
org.apache.pekko.actor.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:
   pekko.actor.mailbox.requirements {
     "org.apache.pekko.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 pekko.actor.AbstractActorWithUnboundedStash. There is also an unrestricted version pekko.actor.AbstractActorWithUnrestrictedStash that does not enforce the mailbox type.