Superviseur gestion des superviseurs akka
-
28-10-2019 - |
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?
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 .