2014-10-27 63 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