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 = ()