0

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

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

现在我想访问由这个路由器管理的 5 个孩子的 ActorRef 对象。是否有一些方法调用来为所有孩子检索它?还是我必须明确声明它们然后将它们传递给路由器?

4

3 回答 3

2

发送akka.routing.GetRoutees到路由器actor将使其在akka.routing.Routees消息中发回其当前使用的路由

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

于 2015-05-19T15:49:12.350 回答
0

聚会有点晚了,但我是这样做的,前提是您使用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
于 2016-02-15T05:00:22.357 回答
0

很长一段时间过去了,我对 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);
    ...
}
于 2019-04-11T14:03:52.387 回答