Lambdaカクテル

ソフトウェア開発者です.玉石混淆です.

Akkaのアクターの生死を検出する

Akkaでのアクターは、か弱くてすぐに死ぬことが前提の存在なので、死んだ事を検出してやらないといけない場面というものがある。

Actorが死んだ(エラーを吐いたか自殺したか)ことを検出するにはcontext.watchTerminatedとを使う。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")
  }
}