Question

Je pense qu'il pourrait y avoir une question plus large de la conception d'applications utilisant Akka caché ici, mais je vais demander comment peut-on mise en place d'un arbre de supervision où un superviseur « noyau » ou « haut » peut surveiller les enfants qui sont les autres superviseurs qui travailleurs de superviseur?

Était-ce utile?

La solution

Vous pourriez commencer par un superviseur déclarative au niveau supérieur

 val kernel = Supervisor(
     SupervisorConfig(
         OneForOneStrategy(List(classOf[Exception]), 3, 1000),
         Supervise(
             actorOf[Module1],
             Permanent) ::
         Supervise(
             actorOf[Module2],
             Permanent) ::
         Supervise(
             actorOf[Module3],
             Permanent) ::
         Nil
     )
 )

où le module 1 à 3 représente le prochain niveau de l'architecture de votre application. Chaque module lui-même est un superviseur pour tous ses acteurs enfants et mis en œuvre comme par exemple

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

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

Vous pourriez remplacer le « registre (acteur) » message avec quelque chose de plus adapté à votre application, et vous pourriez vouloir étendre un autre programme créé couche de superviseur, mais essentiellement ce serait l'approche à suivre.

Vous trouverez plus de détails (comme Viktor déjà commenté) dans la documentation officielle sur akka tolérance de défaut avec Scala ou La tolérance aux pannes avec Java .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top