Interface Stash
- All Superinterfaces:
Actor
,RequiresMessageQueue<DequeBasedMessageQueueSemantics>
,StashSupport
,UnrestrictedStash
- All Known Subinterfaces:
AbstractPersistentActorLike
,AsyncWriteProxy
,AtLeastOnceDelivery
,AtLeastOnceDeliveryLike
,Eventsourced
,PersistenceStash
,PersistentActor
,PersistentFSM<S,
D, E>
- All Known Implementing Classes:
AbstractActorWithStash
,AbstractFSMWithStash
,AbstractPersistentActor
,AbstractPersistentActorWithAtLeastOnceDelivery
,AbstractPersistentActorWithTimers
,AbstractPersistentFSM
,AbstractPersistentLoggingFSM
,JournalPerfSpec.BenchActor
,PersistencePluginProxy
,PersistentShardCoordinator
,UntypedAbstractActorWithStash
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:
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
that also enforces unboundedness of the deque see pekko.actor.UnboundedStash
. For a Stash
that does not enforce any mailbox type see pekko.actor.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 org.apache.pekko.actor.Actor
Actor.emptyBehavior$, Actor.ignoringBehavior$
-
Method Summary
Methods inherited from interface org.apache.pekko.actor.Actor
aroundPostRestart, aroundPostStop, aroundPreRestart, aroundPreStart, aroundReceive, context, org$apache$pekko$actor$Actor$_setter_$context_$eq, org$apache$pekko$actor$Actor$_setter_$self_$eq, postRestart, preStart, receive, self, sender, supervisorStrategy, unhandled
Methods inherited from interface org.apache.pekko.actor.StashSupport
actorCell, clearStash, context, enqueueFirst, mailbox, org$apache$pekko$actor$StashSupport$_setter_$mailbox_$eq, prepend, self, stash, theStash_$eq, unstash, unstashAll, unstashAll
Methods inherited from interface org.apache.pekko.actor.UnrestrictedStash
postStop, preRestart, super$postStop, super$preRestart