我创建了一个这样的actor的RouterPool:
val myActorPool = Akka.system.actorOf(RoundRobinPool(5).props(Props[MyActor]), "myActor")
现在我想访问由这个路由器管理的 5 个孩子的 ActorRef 对象。是否有一些方法调用来为所有孩子检索它?还是我必须明确声明它们然后将它们传递给路由器?
我创建了一个这样的actor的RouterPool:
val myActorPool = Akka.system.actorOf(RoundRobinPool(5).props(Props[MyActor]), "myActor")
现在我想访问由这个路由器管理的 5 个孩子的 ActorRef 对象。是否有一些方法调用来为所有孩子检索它?还是我必须明确声明它们然后将它们传递给路由器?
发送
akka.routing.GetRoutees
到路由器actor将使其在akka.routing.Routees
消息中发回其当前使用的路由
来自:http ://doc.akka.io/docs/akka/2.3.11/scala/routing.html#Management_Messages
聚会有点晚了,但我是这样做的,前提是您使用Routee
的是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
很长一段时间过去了,我对 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);
...
}