1

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

例如,这里是一个示例,其中键入了作为系统子级的参与者 - 我希望它是配置路由器中 ConfigResponders 的子级

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

在这种情况下,我不想要一堆与数据库的连接。

提前致谢!

4

2 回答 2

2

我有点想通了。问题是你想要有一个特定的监督策略——你可以像这样通过创建一个参与者的路由器来使用类中的监督策略。

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


  val zkSupervisor =
    AllForOneStrategy() {
      case _: WhateverException ⇒
       //do stuff
        Restart
    }
于 2013-09-11T16:41:17.340 回答
1

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

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

于 2013-09-11T20:30:04.587 回答