2011-05-02 247 views
2

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

+1

让最高管理者产生并链接其他主管,并让这些主管产生并链接工作人员。 – 2011-05-02 21:37:32

+0

感谢Viktor,你是否知道一个以编程方式对比声明式的例子? – Tim 2011-05-03 19:43:49

+1

您必须以编程方式执行此操作,请查看以下文档:http://doc.akka.io/fault-tolerance-scala – 2011-05-04 12:55:23

回答

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) 
    } 
} 

你可能会取代“注册(演员)”的东西更适合你的应用程序消息实现的,你可能要跨越进一步以编程方式创建主管层,但基本上这将是遵循的方法。

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

+0

我可以假设这个答案不适用于Akka 2.x吗? – 2012-08-25 12:08:13

+0

没错,这只是Akka 1.x。监督机制在2.x中完全改变了 – Steffen 2012-09-29 14:36:17