2

我认为这里可能隐藏了一个使用 Akka 进行应用程序设计的更广泛的问题,但我会问如何建立一个监督树,其中“内核”或“顶级”监督员可能监督其他监督员的孩子,哪些监督员?

4

1 回答 1

1

您可以从顶层的声明式主管开始

 val kernel = Supervisor(
     SupervisorConfig(
         OneForOneStrategy(List(classOf[Exception]), 3, 1000),
         Supervise(
             actorOf[Module1],
             Permanent) ::
         Supervise(
             actorOf[Module2],
             Permanent) ::
         Supervise(
             actorOf[Module3],
             Permanent) ::
         Nil
     )
 )

其中模块 1 到 3 代表应用程序架构的下一个级别。每个模块本身都是其所有子角色的主管,并像例如

class Module1 extends Actor {
   self.faultHandler = OneForOneStrategy(List(classOf[Throwable]), 5, 5000)

   def receive = {
       case Register(actor) =>
       self.link(actor)
   }
}

您可能会用更适合您的应用程序的内容替换“Register(actor)”消息,并且您可能希望跨越进一步以编程方式创建的主管层,但基本上这将是遵循的方法。

您将在有关Scala 容错Java 容错的官方 akka 文档中找到更多详细信息(正如 Viktor 已评论的那样) 。

于 2011-06-06T10:33:47.093 回答