je l'exemple de code suivant:Regarder pas acteur de l'enfant à l'échec en raison d'une exception
class WatchingActor(actorToWatch: ActorRef) extends Actor {
context watch actorToWatch
override def receive = {
case _: Terminated =>
println("watched actor is dead")
}
}
class ActorToWatch extends Actor {
override def receive: Receive = {
case _ => throw new IllegalArgumentException("")
}
}
object Application extends App {
implicit val ac = ActorSystem("test-sys")
val toWatch = ac.actorOf(Props[ActorToWatch])
val watcher = ac.actorOf(Props(new WatchingActor(toWatch)))
toWatch ! "lol"
}
Est-il possible d'une certaine manière de surveiller l'échec ActorToWatch (est exception a été levée) sans en faire l'enfant de WatchingActor? Dans cet exemple, "acteur regardé mort" n'est pas imprimé, je suppose que ActorToWatch est redémarré sur excpetion, au lieu de s'arrêter. Comment gérer l'échec de l'acteur observé qui n'est pas un enfant?
Est-il possible de changer de stratégie de supervision pour un acteur spécifique, qui n'est pas un enfant de WatchingActor? –
Vous pouvez modifier la stratégie de supervision d'un acteur (http://doc.akka.io/docs/akka/current/scala/fault-tolerance.html#Creating_a_Supervisor_Strategy). Si vous souhaitez appliquer un comportement différent en fonction de l'enfant, vous pouvez alors lancer différentes exceptions dans vos enfants pour les distinguer. –
Pourriez-vous l'illustrer dans votre réponse pour être clair. J'ai lu la documentation et il y a écrit, je l'essaie. Cela fonctionne si je fais WatchingActor parent de ActorToWatch. –