Вы можете начать с декларативного супервизора на верхнем уровне
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 .