2015-11-05 34 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只有在傳遞消息時纔會查找現有角色,即不創建角色或在選擇創建時驗證角色的存在。