0

私はこのチュートリアルに従っています

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

そのままフォローしていますが、プログラムが実行されていないため、エラーが発生し、この行について混乱しています:

val remote = context.actorFor("akka://HelloRemoteSystem@127.0.0.1:5150/user/RemoteActor")

「ユーザー」の代わりに何を書く必要がありますか? たとえば、最後までのフルパスを書くと:

 val remote = context.actorFor("akka://HelloRemoteSystem@127.0.0.1:5150/sw/opt/programs/akka/akkaremoting/RemoteActor")

hellolocal と helloremote の両方を実行すると、そのアドレスのアクターの検索に関するエラーが発生します。

コードをそのまま書くと、エラー helloremote erros が表示されます。

[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'.
^Csarawaheed@ubuntu:/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'.
^Csarawaheed@ubuntu:/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

2 に答える 2

4

リモート akka アクター パスは、次のコンポーネントで構成されます。

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。次に、RemoteActorは最上位のアクター (直属のスーパーバイザーではなく、別のアクターsystemの とは対照的に開始) として開始され、パスの下にロールアップされます。すべてをまとめると、そのアクターをリモートで検索するために使用するパスは、サンプル コードで指定されているものです。contextname = "RemoteActor"/user/RemoteActor

"akka://HelloRemoteSystem@127.0.0.1:5150/user/RemoteActor"
于 2014-10-27T12:23:56.950 に答える
0

「ユーザー」を変更する必要はありません

akkaのドキュメントの中を見ると、「ユーザー」は、ユーザー関連/ユーザー作成のすべてのアクターを含む各アクター システムのサブディレクトリであることがわかります。これはユーザーの名前ではありません :)

于 2014-10-27T12:16:56.133 に答える