Scala 如何仅仅阻止儿童演员对父母';让我们重新开始?

Scala 如何仅仅阻止儿童演员对父母';让我们重新开始?,scala,akka,scala-2.10,akka-persistence,Scala,Akka,Scala 2.10,Akka Persistence,我有一个阿卡族的家长演员和几个孩子。当父角色重新启动时,我需要它简单地停止其子角色,而不是停止并重新创建或重新启动它们。(如果需要的话,可以在以后手动创建子项。)有没有办法做到这一点?也许通过某种方式重写父级的预重启方法?默认情况下Actor在重启时处理其子级。这是Actor.preRestart代码: /** * User overridable callback: '''By default it disposes of all children and then calls `p

我有一个阿卡族的家长演员和几个孩子。当父角色重新启动时,我需要它简单地停止其子角色,而不是停止并重新创建或重新启动它们。(如果需要的话,可以在以后手动创建子项。)有没有办法做到这一点?也许通过某种方式重写父级的
预重启
方法?

默认情况下
Actor
在重启时处理其子级。这是
Actor.preRestart
代码:

  /**
   * User overridable callback: '''By default it disposes of all children and then calls `postStop()`.'''
   * @param reason the Throwable that caused the restart to happen
   * @param message optionally the current message the actor processed when failing, if applicable
   * <p/>
   * Is called on a crashed Actor right BEFORE it is restarted to allow clean
   * up of resources before Actor is terminated.
   */
  @throws(classOf[Exception]) // when changing this you MUST also change UntypedActorDocTest
  //#lifecycle-hooks
  def preRestart(reason: Throwable, message: Option[Any]): Unit = {
    context.children foreach { child ⇒
      context.unwatch(child)
      context.stop(child)
    }
    postStop()
  }

因此,出于您的目的,您不需要覆盖
预重启
,就可以获得所需的行为。如果希望有更多自定义行为,如在启动时启动子项,而不是在重新启动事件时启动子项,则可以查看其他回调。

如何创建子项:在父级初始化期间或在接收时无条件创建?@AlekseyIzmailov on receive。它看起来像是在接收时创建的子项(而不是在父级初始化期间创建的子项)已停止,但未重新创建。然而,我还没有让自己相信这一点。有人能确认这是实际的行为吗?是的,这就是
重新启动前所做的-见下面我的答案
override def preRestart(reason: Throwable, message: Option[Any]): Unit = ()