我很新的阿卡,我有以下问题:阿卡主管战略路由器
我在那里一个路由器定义一个MasterActor而这正是我所定义的supervisionStrategy:
override val supervisorStrategy = OneForOneStrategy() {
case _: FileNotFoundException =>
println("****** Failed actor in FileNotFound: " + sender)
Restart
}
然后我通过这个supervisionStrategy到路由器:
val router = context.actorOf(RemoteRouterConfig(RoundRobinPool(3, supervisorStrategy=supervisorStrategy), addresses).props(Props(classOf[MapActor], reduceActor)), "router")
我把打印语句在postRestart方法,我看到只有一个演员重新启动。这使我相信我走在了正确的轨道上。
不过,我有2个问题至今:
问题#1:
我注意到,发件人在打印语句deadLetters。我预计它会成为失败的演员。
问题2:
我把打印语句在postRestart方法,我看到,在遇到FileNotFound异常,当只有一个routee重启和的继续处理。这似乎是正确的行为。但是,如果我将SupervisorStrategy更改为StopNotFound异常(如下所示),我会看到所有actor都停下来,并且我根本没有进行任何处理。我希望所有参与者都能看到处理过程,直到遇到FileNotFound异常。当失败的演员击中FileNotFound异常时,我认为只有该演员应该停止,其他人应该继续处理。
override val supervisorStrategy = OneForOneStrategy() {
case _: FileNotFoundException =>
println("****** Failed actor in FileNotFound: " + sender)
Stop
}