2011-05-02 244 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