如何在OneForOneStrategy设置中获取失败actor的actorRef?

时间:2016-05-01 20:42:20

标签: scala akka

如何获取actorRef或失败节点的名称?如果异常发生一次,我需要重新启动节点。如果发生异常> 1,然后我需要恢复。

我的想法是让主管存储给定节点有多少次异常 - 但我无法弄清楚哪个节点失败了。也许这种方法很糟糕。

x是失败节点有给定异常的次数。

 OneForOneStrategy() {
     case _: FileNotFoundException =>
         // Need to know how many times node n has had this exception and restart/resume as required.
         if(x == 1)
             Restart
         else
             Resume
     case _: Exception => Stop
 }

2 个答案:

答案 0 :(得分:1)

您可以捕获FileNotFoundException并将具有ActorRef字段的CustomException抛出到异常的Actor(self)。然后在OneForOne中,您将捕获CustomException字段设置为问题参与者的ActorRef。所以现在你有一个对失败的actor的引用,然后检查你在主管里面描述的异常计数,然后调用是否重启/恢复。

答案 1 :(得分:1)

实际上在主管的决策者中你可以通过sender()方法获得失败孩子的ActorRef。