2017-08-16 8 views
0

私は2つのリモートノードA & Bを持っているとしましょう。これらのノードは、TCP上と両方のActorSystems上でお互いに見えます。リモートアクタ作成中に、アクターはシリアル化されますか?

ノードAには、そのクラスパスにActor Fooを含むjarがあります。ノードBはそうではありません。

ノードAのActorSystemがノードBに、ActorSystemでFoo Actorをリモート作成するように指示した場合、それは機能しますか? Will Fooのバイトコードは、有線を介してBに送信されるか、ノードBがクラスパスにFooを持たせる必要があり/期待されますか?

答えて

3

いいえ、動作しません。ノードAのアクターシステムが、ノードBのアクターシステムにFooアクターを作成するように指示すると、ノードAはアクターを作成せず、ワイヤを介して送信します。むしろ、ノードAはノードBにFooためPropsFooアクターを作成するための、すなわち、レシピ)を送信し、ノードBは、(FooためPropsは、シリアライズ可能でなければならない)Fooのインスタンスを作成しました。さらに、ノードBのアクターシステムのクラスローダーは、Fooクラスのjarを持つ必要があります。 documentationから:

作成俳優リモート

あなたはさらに、次のようにapplication.confファイル(のみの展開部分を示す)修正する必要がありリモーティングアッカで作成機能を使用する場合:

akka { 
    actor { 
    deployment { 
     /sampleActor { 
     remote = "akka.tcp://[email protected]:2553" 
     } 
    } 
    } 
} 

上記の構成、すなわち、U、パス/sampleActorとアクターが作成されたときに反応するアッカに指示歌うsystem.actorOf(Props(...), "sampleActor")。この特定のアクターは直接インスタンス化されませんが、リモート・システムのリモート・デーモンにはアクターの作成が求められます。このサンプルでは[email protected]:2553に対応しています。

あなたコードに次のように行うと、あなた以上のプロパティを設定したら:

val actor = system.actorOf(Props[SampleActor], "sampleActor") 
actor ! "Pretty slick" 

のクラスローダつまりSampleActorがそれを使用してランタイムに利用可能でなければならないアクタクラス、アクターシステムにはクラスを含むJARが必要です。同じセクションで

遠くダウン:

リモート展開により、リモートでコードがロードではないことに注意してください、リモートシステム上に展開されるアクタークラスは、そのリモートシステム上に存在する必要があります。

関連する問題