2013-02-15 1 views
4

Можно ли отправить сообщение всем актерам в актерской системе? Я рассматривал пример Broadcast router, но это настолько маргинально, что я не могу понять, как динамически добавлять актеров в маршрутизатор.Отправка сообщения всем действующим лицам в системе ActorSystem

Мы используем scala для akka.

Спасибо!

ответ

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

Выбирает всех детей опекуна и посылает им сообщ.

+0

Вопрос состоял в том, чтобы отправить всех актеров, хотя и не просто детей из корня. Что относительно внуков (/ ...) от корня? –

8

Если вы хотите отправить сообщение всем актер, который динамически создан, вы можете использовать eventBus

Лично я использую system.eventStream для моего случая.

От актера, вы можете отправить всем:

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

или непосредственно с системой.

актер должен подписаться с:

context.system.eventStream.subscribe 

Я простирается от:

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

Спасибо twillouer! Я тоже об этом думал, но я действительно скучаю по хорошим примерам. – Pepster

+0

Супер полезный, я рассмотрю это .. – Pepster

+1

1. Возможно, в 'postStop' вам нужно« отписаться »; 2. Возможно, лучше отказаться от подписки _before_, вызвав 'super.postStop()'. –

Смежные вопросы