Akka主管管理主管

时间:2011-05-02 19:25:46

标签: akka akka-supervision

我认为使用隐藏在这里的Akka可能会有更广泛的应用程序设计问题,但我会问一个如何设置一个监督树,其中“内核”或“顶级”主管可能会监督其他主管的孩子主管工人?

1 个答案:

答案 0 :(得分: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表示应用程序体系结构的下一级。每个模块本身都是其所有子actor的监督者,并且实现了例如

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

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

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

您可以在Fault tolerance with ScalaFault tolerance with Java上的官方akka文档中找到更多详细信息(如Viktor已经评论过的那样)。