import akka.actor.{ Actor, Props, Terminated }
class WatchActor extends Actor {
val child = context.actorOf(Props.empty, "child")
context.watch(child) // <-- this is the only call needed for registration
var lastSender = context.system.deadLetters
def receive = {
case "kill" =>
context.stop(child); lastSender = sender()
case Terminated(`child`) => lastSender ! "finished"
}
}
ここでは、Terminated
メッセージに関して混乱しています。終了メッセージの目的は何ですか
アクタが子アクタを作成するとき、デフォルトでそれを見ていないのですか? その子供の俳優が時期尚早に死亡する場合、デフォルトの戦略はそれを正しく再起動することでしょうか?
上記コードスニペットのTerminated
メッセージの目的は何ですか? (akkaウェブサイトから:http://doc.akka.io/docs/akka/2.4/scala/actors.html)
子供の俳優が終了する場合、WatchActor
はそのメッセージを受け取るでしょうか?しかし、lastSender()
には「完了」というメッセージが送信されており、この場合はlastSender
が子アクターになりますか?
それは本当ですが、子アクターがwatchActorによって作成された場合、context.watchを明示的に呼び出す必要はありません。それが別の俳優なら、それは私にとって意味があります。 –
@coolbreezeはい、akkaのアプローチはちょっと "駄目"です、私はいくつかの小さな "P.S."それについては、しかし、塩の穀物で私の意見を取る:) – dk14