从另一个Actor的上下文中查找对子Actor的引用是直截了当的,如下所示:
val foo = context.child("foo") match {
case None => createFoo
case Some(c) => c
}
我遇到的问题是我正在使用Akka.system
在我的控制器中创建我的第一个Actor,它看起来像这样:
val myActor = Akka.system.actorOf(Props(new MyActor(anId)), s"id-${anId}")
现在当我的控制器多次被调用时,它会不断尝试创建相同的actor,这显然是错误的。这将抛出异常。在这种情况下我没有context
,因为Controller本身不是Actor。
如何使用Akka.system取回我的参考资料?似乎不推荐使用Akka.system.actorFor,不再推荐使用2.2.0(我正在使用Scala)。
有没有办法写一个match {}
子句来获取提供的id的MyActor?
答案 0 :(得分:0)
您可以使用actorSelection。但是使用它有点复杂。我发现最简单的方法是跟踪你创建的actorRefs。基本上你创建一次actorRef(例如在控制器初始化期间)并将其存储为val。
如果由于任何原因这不起作用,您仍然可以使用actorSelection查找actor。必须首先创建actor才能被actorSelection检索。 ActorSelection可以通过路径查找actor,并返回一个ActorSelection对象,您可以向其发送Identify消息。有一个resolveOne方法,它将使用ActorRef返回一个Future,它更易于使用,但我认为它仅在Akka 2.2.1中可用。 Here is the documentation for actorSelection