Akkaでのアクターは、か弱くてすぐに死ぬことが前提の存在なので、死んだ事を検出してやらないといけない場面というものがある。
Actorが死んだ(エラーを吐いたか自殺したか)ことを検出するにはcontext.watch
とTerminated
とを使う。ActorRef
を入手した時点でそのActorRef
を引数にしてcontext.watch
を呼び出す。watchしたアクターが終了するとwatchした側のActorにTerminated(actorRef: ActorRef)
がメッセージパッシングされるのでそれを拾えばよい。
class ParentActor extends Actor { val aref = context.actorOf(ChildActor.props()) context.watch(aref) def receive = { case Terminated(deadman) => println("Actor has been dead") } }