Handling expected and unexpected actor termination
There are five ways that an actor can terminate. These are
enumerated by the StopCause
enum:
Stopped
: Successful terminationFailed
: Actor terminated itself due to some problemKilled
: Actor was killed by another entityDropped
: The lastActorOwn
referencing this actor was droppedLost
: This indicates that the connection to a remote actor has been lost. Remote actors are not implemented yet.
Both Failed
and Killed
have an associated boxed Error
. When
an actor is created, a notification handler Ret<StopCause>
is
normally provided. This receives the reason for the actor's
termination when it terminates. So usually a parent actor will keep a
hold of the ActorOwn
for the child actor within its own state, and
will receive the termination notification. However other patterns are
also possible.
On receiving a termination notification, the parent actor might choose
to restart the child, or terminate itself, or take some other action.
The parent actor has a free choice on how to handle it. It is
possible to downcast the Error
to take a different action
depending on the type of failure if necessary.