如何获取Akka中RouterPool的所有子节点的ActorRef

时间:2015-05-19 11:01:29

标签: scala akka akka-supervision

我创建了一个像这样的演员的RouterPool:

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

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

3 个答案:

答案 0 :(得分:2)

  

向路由器演员发送akka.routing.Routees将使其在CKEDITOR.replace( 'editor1' ); 消息中发送回当前使用的路由

来自:this

答案 1 :(得分: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

然后你可以通过调用:

来获取actor引用
select cast (('Column_Year' + '/' + 'Column_Month' + '/' + 'Column_Date') as datetime) from Table_name

答案 2 :(得分: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);
    ...
}