如何在 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
聚会有点晚了,但我是这样做的,前提是你使用的 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);
...
}
我创建了这样一个 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 aakka.routing.Routees
message
来自:http://doc.akka.io/docs/akka/2.3.11/scala/routing.html#Managagement_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);
...
}