Interface AbstractPersistentActorLike
-
- All Superinterfaces:
Actor,Eventsourced,PersistenceIdentity,PersistenceRecovery,PersistenceStash,RequiresMessageQueue<DequeBasedMessageQueueSemantics>,Snapshotter,Stash,StashFactory,StashSupport,UnrestrictedStash
- All Known Implementing Classes:
AbstractPersistentActor,AbstractPersistentActorWithAtLeastOnceDelivery,AbstractPersistentActorWithTimers
public interface AbstractPersistentActorLike extends Eventsourced
INTERNAL API
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.pekko.actor.Actor
Actor.emptyBehavior$, Actor.ignoringBehavior$
-
Nested classes/interfaces inherited from interface org.apache.pekko.persistence.Eventsourced
Eventsourced.AsyncHandlerInvocation, Eventsourced.AsyncHandlerInvocation$, Eventsourced.PendingHandlerInvocation, Eventsourced.RecoveryTick, Eventsourced.RecoveryTick$, Eventsourced.StashingHandlerInvocation, Eventsourced.StashingHandlerInvocation$, Eventsourced.State
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description AbstractActor.ReceivecreateReceive()An persistent actor has to define its initial receive behavior by implementing thecreateReceivemethod, also known as the command handler.AbstractActor.ReceivecreateReceiveRecover()Recovery handler that receives persisted events during recovery.<A> voiddefer(A event, Procedure<A> handler)Defer the handler execution until all pending handlers have been executed.<A> voiddeferAsync(A event, Procedure<A> handler)Defer the handler execution until all pending handlers have been executed.<A> voidpersist(A event, Procedure<A> handler)Java API: asynchronously persistsevent.<A> voidpersistAll(java.lang.Iterable<A> events, Procedure<A> handler)Java API: asynchronously persistseventsin specified order.<A> voidpersistAllAsync(java.lang.Iterable<A> events, Procedure<A> handler)Java API: asynchronously persistseventsin specified order.<A> voidpersistAsync(A event, Procedure<A> handler)Java API: asynchronously persistsevent.scala.PartialFunction<java.lang.Object,scala.runtime.BoxedUnit>receiveCommand()Command handler.scala.PartialFunction<java.lang.Object,scala.runtime.BoxedUnit>receiveRecover()Recovery handler that receives persisted events during recovery.-
Methods inherited from interface org.apache.pekko.actor.Actor
context, org$apache$pekko$actor$Actor$_setter_$context_$eq, org$apache$pekko$actor$Actor$_setter_$self_$eq, postRestart, preStart, receive, self, sender, supervisorStrategy
-
Methods inherited from interface org.apache.pekko.persistence.Eventsourced
_lastSequenceNr_$eq, aroundPostRestart, aroundPostStop, aroundPreRestart, aroundPreStart, aroundReceive, batchAtomicWrite, changeState, currentState_$eq, deleteMessages, eventBatch_$eq, flushBatch, flushJournalBatch, internalDefer, internalDeferAsync, internalDeleteMessagesBeforeSnapshot, internalPersist, internalPersistAll, internalPersistAllAsync, internalPersistAsync, journal, journalBatch_$eq, lastSequenceNr, log, nextSequenceNr, onPersistFailure, onPersistRejected, onRecoveryFailure, onReplaySuccess, peekApplyHandler, pendingStashingPersistInvocations_$eq, recovering, recoveryFinished, recoveryRunning, recoveryStarted, requestRecoveryPermit, sendBatchedEventsToJournal, sequenceNr_$eq, setLastSequenceNr, snapshotSequenceNr, snapshotStore, snapshotterId, startRecovery, stash, stashInternally, super$aroundPostRestart, super$aroundPostStop, super$aroundPreRestart, super$aroundPreStart, super$aroundReceive, super$stash, super$unhandled, unhandled, unstashAll, unstashInternally, updateLastSequenceNr, waitingRecoveryPermit, writeEventFailed, writeEventRejected, writeEventSucceeded, writeInProgress_$eq
-
Methods inherited from interface org.apache.pekko.persistence.PersistenceIdentity
journalPluginId, persistenceId, snapshotPluginId
-
Methods inherited from interface org.apache.pekko.persistence.PersistenceRecovery
recovery
-
Methods inherited from interface org.apache.pekko.persistence.PersistenceStash
internalStashOverflowStrategy
-
Methods inherited from interface org.apache.pekko.persistence.Snapshotter
deleteSnapshot, deleteSnapshots, loadSnapshot, saveSnapshot
-
Methods inherited from interface org.apache.pekko.actor.StashFactory
createStash
-
Methods inherited from interface org.apache.pekko.actor.StashSupport
actorCell, clearStash, context, enqueueFirst, mailbox, org$apache$pekko$actor$StashSupport$_setter_$mailbox_$eq, prepend, self, theStash_$eq, unstash, unstashAll
-
Methods inherited from interface org.apache.pekko.actor.UnrestrictedStash
postStop, preRestart, super$postStop, super$preRestart
-
-
-
-
Method Detail
-
createReceive
AbstractActor.Receive createReceive()
An persistent actor has to define its initial receive behavior by implementing thecreateReceivemethod, also known as the command handler. Typically validates commands against current state (and/or by communication with other actors). On successful validation, one or more events are derived from a command and these events are then persisted by callingpersist.
-
createReceiveRecover
AbstractActor.Receive createReceiveRecover()
Recovery handler that receives persisted events during recovery. If a state snapshot has been captured and saved, this handler will receive aSnapshotOffermessage followed by events that are younger than the offered snapshot.This handler must not have side-effects other than changing persistent actor state i.e. it should not perform actions that may fail, such as interacting with external services, for example.
If there is a problem with recovering the state of the actor from the journal, the error will be logged and the actor will be stopped.
- See Also:
Recovery
-
defer
<A> void defer(A event, Procedure<A> handler)Defer the handler execution until all pending handlers have been executed. It is guaranteed that no new commands will be received by a persistent actor between a call todeferand the execution of itshandler. Allows to define logic within the actor, which will respect the invocation-order-guarantee in respect topersistAsyncorpersistcalls. That is, ifpersistAsyncorpersistwas invoked beforedefer, the corresponding handlers will be invoked in the same order as they were registered in.This call will NOT result in
eventbeing persisted, usepersistorpersistAsyncinstead if the given event should possible to replay.If there are no pending persist handler calls, the handler will be called immediately.
If persistence of an earlier event fails, the persistent actor will stop, and the
handlerwill not be run.- Parameters:
event- event to be handled in the future, when preceding persist operations have been processeshandler- handler for the givenevent
-
deferAsync
<A> void deferAsync(A event, Procedure<A> handler)Defer the handler execution until all pending handlers have been executed. Allows to define logic within the actor, which will respect the invocation-order-guarantee in respect topersistAsynccalls. That is, ifpersistAsyncwas invoked before defer, the corresponding handlers will be invoked in the same order as they were registered in.This call will NOT result in
eventbeing persisted, please usepersistorpersistAsync, if the given event should possible to replay.If there are no pending persist handler calls, the handler will be called immediately.
If persistence of an earlier event fails, the persistent actor will stop, and the
handlerwill not be run.- Parameters:
event- event to be handled in the future, when preceding persist operations have been processeshandler- handler for the givenevent
-
persist
<A> void persist(A event, Procedure<A> handler)Java API: asynchronously persistsevent. On successful persistence,handleris called with the persisted event. It is guaranteed that no new commands will be received by a persistent actor between a call topersistand the execution of itshandler. This also holds for multiplepersistcalls per received command. Internally, this is achieved by stashing new commands and unstashing them when theeventhas been persisted and handled. The stash used for that is an internal stash which doesn't interfere with the inherited user stash.An event
handlermay close over persistent actor state and modify it. ThegetSender()of a persisted event is the sender of the corresponding command. This means that one can reply to a command sender within an eventhandler.Within an event handler, applications usually update persistent actor state using persisted event data, notify listeners and reply to command senders.
If persistence of an event fails,
Eventsourced.onPersistFailure(java.lang.Throwable, java.lang.Object, long)will be invoked and the actor will unconditionally be stopped. The reason that it cannot resume when persist fails is that it is unknown if the event was actually persisted or not, and therefore it is in an inconsistent state. Restarting on persistent failures will most likely fail anyway, since the journal is probably unavailable. It is better to stop the actor and after a back-off timeout start it again.- Parameters:
event- event to be persisted.handler- handler for each persistedevent
-
persistAll
<A> void persistAll(java.lang.Iterable<A> events, Procedure<A> handler)Java API: asynchronously persistseventsin specified order. This is equivalent to callingpersist[A](event: A, handler: Procedure[A])multiple times with the samehandler, except thateventsare persisted atomically with this method.- Parameters:
events- events to be persisted.handler- handler for each persistedevents
-
persistAllAsync
<A> void persistAllAsync(java.lang.Iterable<A> events, Procedure<A> handler)Java API: asynchronously persistseventsin specified order. This is equivalent to callingpersistAsync[A](event: A)(handler: A => Unit)multiple times with the samehandler, except thateventsare persisted atomically with this method.- Parameters:
events- events to be persistedhandler- handler for each persistedevents
-
persistAsync
<A> void persistAsync(A event, Procedure<A> handler)Java API: asynchronously persistsevent. On successful persistence,handleris called with the persisted event.Unlike
persistthe persistent actor will continue to receive incoming commands between the call topersistAsyncand executing it'shandler. This asynchronous, non-stashing, version of of persist should be used when you favor throughput over the strict ordering guarantees thatpersistguarantees.If persistence of an event fails,
Eventsourced.onPersistFailure(java.lang.Throwable, java.lang.Object, long)will be invoked and the actor will unconditionally be stopped. The reason that it cannot resume when persist fails is that it is unknown if the event was actually persisted or not, and therefore it is in an inconsistent state. Restarting on persistent failures will most likely fail anyway, since the journal is probably unavailable. It is better to stop the actor and after a back-off timeout start it again.- Parameters:
event- event to be persistedhandler- handler for each persistedevent
-
receiveCommand
scala.PartialFunction<java.lang.Object,scala.runtime.BoxedUnit> receiveCommand()
Description copied from interface:EventsourcedCommand handler. Typically validates commands against current state (and/or by communication with other actors). On successful validation, one or more events are derived from a command and these events are then persisted by callingpersist.- Specified by:
receiveCommandin interfaceEventsourced
-
receiveRecover
scala.PartialFunction<java.lang.Object,scala.runtime.BoxedUnit> receiveRecover()
Description copied from interface:EventsourcedRecovery handler that receives persisted events during recovery. If a state snapshot has been captured and saved, this handler will receive apekko.persistence.SnapshotOffermessage followed by events that are younger than the offered snapshot.This handler must not have side-effects other than changing persistent actor state i.e. it should not perform actions that may fail, such as interacting with external services, for example.
If there is a problem with recovering the state of the actor from the journal, the error will be logged and the actor will be stopped.
- Specified by:
receiveRecoverin interfaceEventsourced- See Also:
pekko.persistence.Recovery
-
-