2015-05-19 2 views
0

создать RouterPool актера, как это:Как получить ActorRefs всех детей в RouterPool в Акку

val myActorPool = Akka.system.actorOf(RoundRobinPool(5).props(Props[MyActor]), "myActor") 

Теперь я хотел бы получить доступ к объектам ActorRef из 5 детей, которые управляются этим маршрутизатор. Есть ли метод вызова для получения этого для всех детей? Или я должен объявить их явно, а затем передать их маршрутизатору?

+0

Если вы хотите контролировать детей, вы можете подумать о круговой группе, а не о пуле. – cmbaxter

+0

Итак, я думаю, это означает, что теперь есть простой вызов метода, чтобы получить actorRefs из пула, и я должен объявить их явно и добавить их в группу. – samy

+0

Да. Объединенные актеры должны быть вне вашего контроля. Если вам нужен контроль над ними, используйте группу. – cmbaxter

ответ

1

Отправка akka.routing.GetRoutees к маршрутизатору актер сделает его отправить обратно свои используемые в настоящее время routees в akka.routing.Routees сообщение

от: http://doc.akka.io/docs/akka/2.3.11/scala/routing.html#Managagement_Messages

+0

Хорошо, что это не возвращает фактические объекты ActorRef, но, по-видимому, для моей цели достаточно Маршрут. – samy

0

Немного опоздал на вечеринку, но вот как я это сделал , при условии, что вы используете Routee S, которые являются ActorRefRoutee:

val actor: Option[ActorRefRoutee] = myActorPool.logic.select("Hello", routees /*Should be able to generate these from router*/) match { 
case actorRefRoutee: ActorRefRoutee => 
    Some(actorRefRoutee) 
case _ => 
    None 
} 

, то вы можете получить ссылку на актера, позвонив по телефону:

actor.ref