使单个参与者成为其他几个参与者的子角色(在路由器中)



我不确定这是否可行 - 我可以让一个演员成为许多其他演员的孩子吗?我当然可以将 ref 传递给其他演员,但在这种情况下我也需要监督才能工作 - 这可能吗?

例如,这是一个类型化参与者的示例,它是系统的子级 - 我希望它是配置路由器中配置响应者的子级

val zoolittle = Zoolittle(system, None, 
  Connect(LocalConfigService.zkAddress, LocalConfigService.zkSessionTimeout))
val configRouter = system.actorOf(Props(classOf[ConfigResponder], zoolittle).withRouter(
  RoundRobinRouter(nrOfInstances = 5)))

在这种情况下,我不希望与数据库建立一堆连接。

提前感谢!

我有点想通了。问题是你想要有一定的监督策略 - 你可以像创建一个Actor的路由器一样使用类中的监督策略。

  val actor: ActorRef = system.actorOf(Props(classOf[ActorClass], system.deadLetters).withRouter(
    RoundRobinRouter(1, supervisorStrategy = zkSupervisor)))

  val zkSupervisor =
    AllForOneStrategy() {
      case _: WhateverException ⇒
       //do stuff
        Restart
    }

每个参与者都由另一个参与者创建,该参与者是其父级和主管。这是Actor模型和监督含义的基础。

如果您希望参与者成为配置响应者的子项,则每个配置响应器都必须创建这样一个子项。如果你只是在主管之后,那就让另一个演员来监督它。使用路由器安装主管策略是可能的,但有点黑客,因为通常主管还必须执行其他职责,例如分配工作或处理孩子的生命周期。

最新更新