akka - 让一个演员成为其他几个演员的孩子(在路由器中)

时间:2013-09-11 14:39:00

标签: scala akka hierarchy akka-supervision

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

例如,这是一个带有类型actor的示例,它是系统的子代 - 我希望它是配置路由器中ConfigResponders的子代

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

在这种情况下,我不希望与db有很多连接。

提前致谢!

2 个答案:

答案 0 :(得分:2)

我有点想出来了。 问题是你想要有一个监督策略 - 你可以通过创建一个actor的路由器来使用类中的监督策略。

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


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

答案 1 :(得分:1)

每个actor都由其他一个actor创建,该actor是其父级和主管。这是演员模型和监督意味着什么的基础。

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