2

私は今、ドキュメントを数回読んでおり(http://doc.akka.io/docs/akka/2.1.4/scala/remoting.html )、ここの例( https://github.com/akka)を通して/akka/tree/master/akka-samples/akka-sample-remote ) などを介して、やりたいことを行う方法がまだわかりません。私が見つけた最も近い答えはこれです: scalaでリモート アクターを開始する方法ですが、私が思っているよりもはるかに不便に思えます。

作業する 12 台のマシンのクラスターがあります。私は次のようなことをしたいと思います:

val system = ActorSystem("DistributedSystem", ConfigFactor.load.getConfig("distsys"))
val master = system.actorOf(Props(new Master(...)), "master")

次に、マスターの内部で、次のようなものがあります。

override def preStart() = {
    for (i <- 0 until 11) {
        // I want each of these actors to be created remotely on 
        // a different machine
        context.actorOf(Props(new RemoteChild(...)), s"child$i")
    }
}

これはかなり一般的な使用例のようです。欠けているものはありますか、またはこれを行うための良い方法はありますか (構成がどのように見えるか、または実際に必要な ActorSystems の数に関して)? 私は今、良い解決策を合成するのに苦労しています。

4

1 に答える 1

2

あなたがやりたいことは、一連のアクターを一連のリモート ノードに展開し、それらをローカル ルーターの背後に配置してメッセージをルーターに渡し、リモート ノードに作業を任せることだと思います。これを行うには、次のようなことを試すことができます。

val addresses = for(i <- 1 until 12) 
  yield AddressFromURIString(s"akka://RemoteSys@192.168.1.$i:2553")

val routerRemote = system.actorOf(Props[RemoteChild].withRouter(
  RemoteRouterConfig(RoundRobinRouter(12), addresses)))

ActorSystemこれは、呼び出されたノードで Akka が実行されておりRemoteSys、ポート 2553 用に構成されたリモート処理を使用していることを前提としています。そのrouterRemoteref にメッセージを送信すると、12 のワーカー ノード間でメッセージがラウンド ロビン ルーティングされます。

于 2013-06-19T16:01:42.183 に答える