나는 두 배우, 부모와 자녀가 있습니다. 부모는 content.watch (child)를 사용하여 자식을 감시합니다. 자식이 context.stop (self)를 호출하면 부모는 Terminated 메시지를받습니다. 그러나 자식이 예외를 throw하면 akka가 다시 시작하지만 부모에게 Terminated 메시지를 보내지 않습니다.Akka deathwatch - 종료 및 재시작 시청하기
class Parent ... {
def receive = {
case "start" =>
val child = ...
context.watch(child)
child ! "throw"
case Terminated(actor) => logger.error(s"$actor died"")
}
}
class Child ... {
def receive = {
case "stop" => context.stop(self) // parent is notified
case "throw" => throw new Exception("oops") // parent is not notified
}
}
어떻게 부모 액터가 자식을 모니터링하고 종료/재시작을 볼 수 있습니까?
class Parent ... {
override val supervisorStrategy = OneForOneStrategy() {
case _: Exception => Stop
}
}
I는이 배우의 모든 아이들에게 적용됩니다 그것을 이해로서 : 내가 생각 해낸
하나의 옵션은 예외에 중단 부모의 감독 전략을 무시하는 것입니다. 이상적으로는 개인의 아이들 (배우의 종류)에 대해 다른 수퍼바이저 전략을 가지고 싶습니다 그래서 나는
class Child ... {
override def postRestart(reason: Throwable): Unit = context.stop(self)
}
I에게 작품을 사용하는 것으로 생각하지만 해킹의 비트처럼 보인다. 내가 모르는 다른 옵션이 있습니까?
감사합니다.
감사합니다, 나는이 아이디어를 살펴 보겠습니다 –