将ActorSelection转换为ActorRef

时间:2015-11-05 11:47:54

标签: scala akka cluster-computing actor

我有一些分配的演员,我需要这些演员的ActorRef。所以我尝试了这一行(它在MemberUp代码中)。

implicit val resolveTimeout = Timeout(5 seconds)
var act=Await.result(context.system.actorSelection(RootActorPath(member.address)/"user"/"myactor2").resolveOne(), resolveTimeout.duration)

但我总是得到以下例外:

  

[错误] [11/03/2015 16:01:58.530]   [ClusterSystem-akka.actor.default-调度-5]   [akka:// ClusterSystem / user / myactor1]未找到Actor:   ActorSelection [Anchor(akka:// ClusterSystem /),Path(/ user / myactor2)]   akka.actor.ActorNotFound:未找到Actor:   ActorSelection [Anchor(akka:// ClusterSystem /),Path(/ user / myactor2)]

我尝试将超时时间增加到15或20秒,但我仍然遇到同样的错误。问题是如果我保留了ActorSelection(

act=context.system.actorSelection(RootActorPath(member.address)/"user"/"myactor2");

),该行正常,我可以向另一个演员发送消息。为什么呢?

1 个答案:

答案 0 :(得分:0)

为什么不只是简单地

val actor = context.system.actorSelection(RootActorPath(member.address)/"user"/"myactor2")
actor ! message // you can directly send message to it!

如果你确定该路径中存在一个actor,那么发送这样的消息就好了。正如官方文件所说:

  

actorSelection只在传递消息时查找现有的actor,即在创建选择时不创建actor或验证actor的存在。