5

如果我在 Akka 中使用 context().actorOf() 创建一个演员,我会得到一个有效的 ActorRef。但是,如果我执行相同操作但使用 actorFor 和我知道该演员将出现的路径创建一个 ActorRef,则我无法可靠地返回一个有效的 ActorRef。如何判断演员注册成功?

在上面的描述中,我可以简单地使用从 actorOf() 返回的 ActorRef。但是,在我的实际情况中,我创建了一个本身注册子演员的演员,我需要解决这个问题,所以一般的问题是“我如何等待/注册以获悉演员已在已知路径注册? ”。

4

2 回答 2

7

从 Akka 2.2.1 开始,您可以使用 ActorSelection.resolveOne 从演员选择中获取 ActorRef :

implicit val timeout = Timeout(5, TimeUnit.SECONDS)
val selection = system.actorSelection("/user/myActor")
val actor = Await.result(selection.resolveOne(), timeout.duration)

来自文档http://doc.akka.io/api/akka/2.2.1/index.html#akka.actor.ActorSelection

解析匹配此选择的 ActorRef。如果存在这样的演员,则结果将作为用 ActorRef 完成的 Future 返回。如果不存在这样的参与者或识别未在提供的超时内完成,则以失败的 ActorNotFound 完成。

在幕后,它与演员对话以验证其存在并获取其 ActorRef。

于 2013-09-10T15:18:24.653 回答
0

首先,不能保证您从 actorOf 返回的 ActorRef 仍然存在,因为它的构造函数可能已经失败。

其次,actorFor 可能会找到演员,但它在被发现之后和您开始使用它之前就死了。

第三,构建应用程序以使依赖关系以逻辑方式传播通常是一种很好的做法,以便在您的参与者之间有一个自然的集合点。

希望以上任何帮助,

快乐哈金!

√</p>

于 2012-05-11T15:24:09.857 回答