我很新的阿卡,我有以下問題:阿卡主管戰略路由器
我在那裏一個路由器定義一個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
}