2011-12-16 6 views
1

This earlier question suggère que l'appel de 'stop' sur un acteur superviseur arrêtera tous les acteurs liés. Cependant, si on crée un acteur 'custom' (pas par une usine), il semble que cet arrêt automatique ne se produise pas. Par exemple, voir le code de la réponse à another question:Création d'un superviseur Akka personnalisé qui ferme tous les acteurs liés

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

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

Si « stop » a été appelé l'acteur Module1 ci-dessus, les acteurs qui y sont liés ne fermer. Existe-t-il un moyen de faire en sorte qu'un acteur personnalisé ferme automatiquement les acteurs liés? Ou est-ce juste quelque chose que vous devez écrire vous-même si vous voulez créer un acteur personnalisé?

Merci!

Répondre

2

Vous pouvez appeler "self.linkedActors.values.iterator", puis leur envoyer un PoisonPill ou les arrêter().

+0

être dans une ambiance difficile: peut-être bon de mentionner que postStop() est l'endroit idéal pour mettre ce code ;-) –

+0

J'ai vu du code comme ça dans la classe SupervisorActor dans le code source d'Akka. Donc, je pourrais copier et coller ce code de SupervisorActor dans ma propre classe de superviseur personnalisé à coup sûr. Je me demandais simplement s'il existait un meilleur moyen que le codage copier-coller. Y a-t-il d'autres comportements que je dois copier et coller dans mon superviseur personnalisé? Comme la possibilité de redémarrer les enfants Acteurs qui ont planté? – bnsmith

+0

Non, ça devrait être ça. Bien, il convient de noter que vous n'avez pas besoin de le faire manuellement en 2.0-M1 et en avant. –

Questions connexes