加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何在父母重启时仅停止儿童演员?

发布时间:2020-12-16 18:35:59 所属栏目:安全 来源:网络整理
导读:我有一个有几个孩子的Akka父母演员.当重新启动父actor时,我需要它来简单地停止它的子节点,而不是停止并重新创建或重新启动它们. (如果需要,将在以后手动创建一个孩子.)有没有办法做到这一点?也许通过某种方式覆盖父级的preRestart方法? 解决方法 默认情况
我有一个有几个孩子的Akka父母演员.当重新启动父actor时,我需要它来简单地停止它的子节点,而不是停止并重新创建或重新启动它们. (如果需要,将在以后手动创建一个孩子.)有没有办法做到这一点?也许通过某种方式覆盖父级的preRestart方法?

解决方法

默认情况下,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()
  }

正如你所看到的那样,父母会停下来并且不看他们的孩子.
你可以像这样覆盖它,让一个演员让孩子们活着:

override def preRestart(reason: Throwable,message: Option[Any]): Unit = ()

因此,为了您的目的,您不需要覆盖preRestart,您将获得所需的行为.如果您想要更多自定义行为,例如在启动时启动子项而不是在重启事件上,则可以查看其他回调.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读