2013-02-15 3 views

Répondre

11
system.actorSelection("/user/*") ! msg 

Sélectionne tous les enfants du tuteur et les envoie msg.

+0

La question était d'envoyer à tous les acteurs, cependant, pas seulement les enfants de la racine. Qu'en est-il des petits-enfants (/ ...) de la racine? –

8

Si vous voulez envoyer un message à tous les acteurs qui sont créés dynamiquement, vous pouvez utiliser eventBus

J'utilise personnellement system.eventStream pour mon cas.

d'un acteur, vous pouvez envoyer à tout le monde:

context.system.eventStream.publish(StatisticsMessage()) 

ou directement avec le système.

acteur

doit souscrire à:

context.system.eventStream.subscribe 

Je Prolonge de:

trait SubscriberActor extends Actor { 

    def subscribedClasses: Seq[Class[_]] 

    override def preStart() { 
    super.preStart() 
    subscribedClasses.foreach(this.context.system.eventStream.subscribe(this.self, _)) 
    } 

    override def postStop() { 
    subscribedClasses.foreach(this.context.system.eventStream.unsubscribe(this.self, _)) 
    super.postStop() 
    } 
} 
+0

Merci twillouer! J'y ai aussi réfléchi, mais il me manque vraiment de bons exemples. – Pepster

+0

Super utile, je vais regarder dans ce .. – Pepster

+1

1. Probablement dans 'postStop' vous avez besoin de" se désabonner "; 2. il pourrait être une meilleure idée de se désabonner _before_ en appelant 'super.postStop()'. –