1

从另一个 Actor 的上下文中查找对子 Actor 的引用是直接的,使用类似以下的方法:

val foo = context.child("foo") match {
    case None     => createFoo
    case Some(c)  => c
  }

我遇到的问题是我正在使用我的控制器中创建我的第一个 Actor Akka.system,它看起来像这样:

 val myActor = Akka.system.actorOf(Props(new MyActor(anId)), s"id-${anId}")

现在,当我的控制器被多次调用时,它一直在尝试创建同一个演员,这显然是错误的。这将引发异常。在这种情况下我没有context,因为控制器本身不是演员。

如何使用 Akka.system 取回我的参考资料?似乎 Akka.system.actorFor 在 2.2.0 中已被弃用并且不再推荐(我使用的是 Scala)。

有没有办法编写一个match {}子句来取回 MyActor 以获取提供的 id?

4

1 回答 1

0

你可以使用actorSelection。不过使用起来有点复杂。我发现最简单的方法是跟踪您创建的 actorRefs。基本上,您创建一次 actorRef(例如在控制器初始化期间)并将其存储为 val。

如果由于任何原因这不起作用,您仍然可以使用 actorSelection 查找演员。为了被actorSelection检索,必须先创建actor。ActorSelection 可以通过路径查找actor,并返回一个ActorSelection 对象,您可以向该对象发送Identify 消息。有一个 resolveOne 方法会返回一个带有 ActorRef 的 Future ,它使用起来要简单得多,但我认为它仅在 Akka 2.2.1 中可用。这是actorSelection的文档

于 2013-10-17T06:51:11.740 回答