如何在 Akka 中获取所有 children 的 RouterPool 的 ActorRefs

How to get ActorRefs of all children of a RouterPool in Akka

我创建了这样一个 actor 的 RouterPool:

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

现在我想访问由该路由器管理的 5 children 中的 ActorRef objects。是否有一些方法调用可以为所有 children 检索它?或者我是否必须明确声明它们然后将它们传递给路由器?

Sending akka.routing.GetRoutees to a router actor will make it send back its currently used routees in a akka.routing.Routees message

来自:http://doc.akka.io/docs/akka/2.3.11/scala/routing.html#Managagement_Messages

聚会有点晚了,但我是这样做的,前提是你使用的 RouteeActorRefRoutee:

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

很长一段时间过去了,我对 Akka.Net 有同样的问题,但没有找到有效的答案。在调试器中发现返回对象的类型帮助了我:

_router.Tell(new GetRoutees());
...
// router callback
var routees = message as Routees;
if (routees != null)
{
    IEnumerable<IActorRef> routeeRefs = routees.Members.Select(r => ((ActorRefRoutee) r).Actor);
    ...
}