Акка супервайзер - PullRequest
       57

Акка супервайзер

2 голосов
/ 02 мая 2011

Я считаю, что здесь может быть скрыт более широкий вопрос проектирования приложений с использованием Akka, но я спрошу, как настроить дерево контроля, где «ядро» или «верхний» супервизор может контролировать детей, которые являются другими супервизорами, которыесупервайзеры?

1 Ответ

1 голос
/ 06 июня 2011

Вы можете начать с декларативного супервизора на верхнем уровне

 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)» чем-то более подходящим для вашего приложения, и вы можете захотетьохватить еще один программно созданный уровень супервизора, но, в принципе, таков подход.* или Отказоустойчивость с Java .

...