2014-10-27 66 views
0

我下面這個教程如何給準確的路徑來尋找遠程演員

http://alvinalexander.com/scala/simple-akka-actors-remote-example

我關注的,因爲它是,但我的程序不運行它給我的錯誤,我很困惑此行:

val remote = context.actorFor("akka://[email protected]:5150/user/RemoteActor") 

我必須寫什麼來代替「用戶」?當我寫的完整路徑結束例如:

val remote = context.actorFor("akka://[email protected]:5150/sw/opt/programs/akka/akkaremoting/RemoteActor") 

,並同時運行hellolocal和helloremote既給我關於查找演員該地址錯誤。

,如果我寫的代碼,因爲它是它給了我錯誤 helloremote誤差修改:

[INFO] [10/27/2014 16:06:23.736] [HelloRemoteSystem-akka.actor.default-dispatcher-2] [akka://HelloRemoteSystem/deadLetters] Message [java.lang.String] from Actor[akka://HelloRemoteSystem/user/RemoteActor#911921687] to Actor[akka://HelloRemoteSystem/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 
^[email protected]:/opt/ifkaar/programs/akka/akkaremoting/helloremote$ sbt run 
[info] Loading project definition from /opt/ifkaar/programs/akka/akkaremoting/helloremote/project 
[info] Set current project to helloremote (in build file:/opt/ifkaar/programs/akka/akkaremoting/helloremote/) 
[info] Running HelloRemote 
Remote Actor receive messgage : The remote actor is alive 
[INFO] [10/27/2014 17:24:06.136] [HelloRemoteSystem-akka.actor.default-dispatcher-2] [akka://HelloRemoteSystem/deadLetters] Message [java.lang.String] from Actor[akka://HelloRemoteSystem/user/RemoteActor#-792263999] to Actor[akka://HelloRemoteSystem/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 

hellolocal誤差修改:

[INFO] [10/27/2014 16:06:23.736] [HelloRemoteSystem-akka.actor.default-dispatcher-2] [akka://HelloRemoteSystem/deadLetters] Message [java.lang.String] from Actor[akka://HelloRemoteSystem/user/RemoteActor#911921687] to Actor[akka://HelloRemoteSystem/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 
^[email protected]:/opt/ifkaar/programs/akka/akkaremoting/helloremote$ sbt run 
[info] Loading project definition from /opt/ifkaar/programs/akka/akkaremoting/helloremote/project 
[info] Set current project to helloremote (in build file:/opt/ifkaar/programs/akka/akkaremoting/helloremote/) 
[info] Running HelloRemote 
Remote Actor receive messgage : The remote actor is alive 
[INFO] [10/27/2014 17:24:06.136] [HelloRemoteSystem-akka.actor.default-dispatcher-2] [akka://HelloRemoteSystem/deadLetters] Message [java.lang.String] from Actor[akka://HelloRemoteSystem/user/RemoteActor#-792263999] to Actor[akka://HelloRemoteSystem/deadLetters] was not delivered. [1] dead letters encountered. This logging can be turned off or adjusted with configuration settings 'akka.log-dead-letters' and 'akka.log-dead-letters-during-shutdown'. 

回答

4

的遠程阿卡演員路徑由以下部件組成:

protocol:actor system name:server address:remoting port:root path:actor path + name 

因此,對於第一個例子中,這些組件最終被:

protocol = akka:// 
actor system name = HelloRemoteSystem 
server address = 127.0.0.1 
remoting port = 5150 
root path: user 
actor path + name = RemoteActor 

您在自定義演員代碼中啓動的所有演員將在user根目錄下彙總。 Akka使用另一個名爲system的系統級角色。這些角色屬於用戶需要定製應用程序的自定義角色的獨立層級和監督方案。因此user應始終是示例中自定義RemoteActor的路徑的一部分。然後,因爲RemoteActorname = "RemoteActor"作爲頂級演員(沒有直接主管,從system開始,而不是context的另一個演員)開始,因此它將在路徑/user/RemoteActor下捲起。所以把它放在一起,用於遠程查找演員的路徑是示例代碼中給出的那個:

"akka://[email protected]:5150/user/RemoteActor" 
0

你並不需要改變 「用戶」

如果您查看akka的文檔,您會看到「用戶」是每個角色系統的子目錄,其中包含所有與用戶相關的/用戶創建的演員,這不是你的用戶:)的名稱

+0

但它給我錯誤 – swaheed 2014-10-27 12:26:40