在Akka中处理子角色异常

在Akka中处理子角色异常,akka,Akka,我有一个主管演员,他创造了这样的儿童演员: class SupervisorActor extends Actor { val child = context.actorOf(MyConnectorActor.props(config),"MyConnector") def receive = { case Message => child ! "throw" } } class MyConnectorActor extends Actor { def r

我有一个主管演员,他创造了这样的儿童演员:

class SupervisorActor extends Actor {

  val child  = context.actorOf(MyConnectorActor.props(config),"MyConnector")

  def receive = {
    case Message => child ! "throw"
  }
}

class MyConnectorActor extends Actor {

  def receive = {
    case "throw" => throw new Exception()
  }
}
现在在我的MyConnectorActor孩子中,我自愿抛出一个异常。监管者应该如何处理?我是否需要添加主管策略

  override val supervisorStrategy =
    OneForOneStrategy(maxNrOfRetries = 30, withinTimeRange = 1.minute) {
      case _ =>
        println("RESTARTING CHILD FROM SUPERVISOR")
        Restart
    }

即使添加了这个,我也看不到我的孩子演员重新开始?还有什么其他需要做的吗?

将正常异常抛出(
抛出新的…异常
)替换为
,因为它比正常异常造成的危害要大得多

Predef
(sic!)中定义的
方法,准确地说是一个未实现的错误。Akka在异常处理代码中使用的方法不会处理错误。这是因为错误被视为“系统现在必须尽快停止”,而不仅仅是“异常”


替换为更现实的操作,比如运行时异常,您应该看到参与者按预期重新启动。

将正常异常抛出(
抛出新的…异常
)替换为
,因为它比正常异常造成的危害要大得多

Predef
(sic!)中定义的
方法,准确地说是一个未实现的错误。Akka在异常处理代码中使用的方法不会处理错误。这是因为错误被视为“系统现在必须尽快停止”,而不仅仅是“异常”


替换为更现实的异常,如运行时异常,您应该看到参与者按预期重新启动。

异常实际上是在子级中引发的,我希望此主管对该异常做出反应并重新启动子级。我编辑了我的帖子!请看一看!它在任何情况下都可能重新启动,因为这是默认行为。您的代码应该使用OneForOneStrategy覆盖父级中的supervisionStrategy,而不仅仅是在某个地方定义了OneForOneStrategy。请阅读akka docsHow中的详细信息,如果我可以问的话,您是否观察到缺少重启?我的孩子有一个重启前的状态,我看到它从未被调用过!好吧,那是我的错!有一个陈旧的jar文件,我用sbt clean清除了它,然后重新运行我的应用程序,我可以看到这个子文件已经重新启动。但是我如何使它进行初始化,就像它在异常之前最初启动时所做的那样?异常实际上是在子级中抛出的,我希望此主管对该异常做出反应并重新启动子级。我编辑了我的帖子!请看一看!它在任何情况下都可能重新启动,因为这是默认行为。您的代码应该使用OneForOneStrategy覆盖父级中的supervisionStrategy,而不仅仅是在某个地方定义了OneForOneStrategy。请阅读akka docsHow中的详细信息,如果我可以问的话,您是否观察到缺少重启?我的孩子有一个重启前的状态,我看到它从未被调用过!好吧,那是我的错!有一个陈旧的jar文件,我用sbt clean清除了它,然后重新运行我的应用程序,我可以看到这个子文件已经重新启动。但是我如何使它进行初始化,就像它在异常之前最初启动时那样?