2015-11-05 29 views
0

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

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

但我总是得到以下异常:

[错误] [2015年11月3日16:01:58.530] [ClusterSystem-akka.actor.default-调度-5] 演员发现未找到: ActorSelection [Anchor(akka:// ClusterSystem /),Path(/ user/myactor2)] akka.actor.ActorNotFound:未找到任何演员名字: ActorSelection [Anchor(akka:// ClusterSystem /),Path(/ user/myactor2)]

我试着将超时时间增加到15或20秒,但我仍然得到相同的错误。问题是,如果我保持ActorSelection(

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

),线路工作正常,我可以发送消息给其他演员。为什么?

回答

0

为什么不只是单纯的

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

如果确定有一个演员存在于这条道路,这是什么?据发送短信那样。正如官方文档所说:

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