私が抱えている問題は、別のスレーブマシンでシステムを作成できることです。しかし、パーツを別のマシンに配布する方法がわかりません。IE マスター、スレーブ 1、およびスレーブ 2 はすべて、それぞれ IP 101、102、および 103 ではなく、同じマシンで終了します。
マスター サーバーを使用して、基本的に複数のサーバーを介してメッセージのワークフローを管理しています。したがって、マスターが起動すると、次のことを行うマスター サーバー アクターが作成されます。
- 主人:
- 開始メッセージをスレーブ 1 に送信します
- スレーブ 1 から成功メッセージを取得し、メッセージをスレーブ 2 に渡します
- スレーブ 2 から成功メッセージを受け取り、システムをシャットダウンします
- Slave1: サーバーからメッセージを取得し、マスターに成功を返信します
- Slave2: サーバーからメッセージを取得し、マスターに成功を返信します
後で、これらのそれぞれを水平方向にスケーリングしたいのですが、その前に問題が発生しました。すべてのリモート機能は 1 台のマシンでのみ実行されます。
リモートを使用しているため、構成の一部は次のようになります。
akka {
actor {
provider = "akka.remote.RemoteActorRefProvider"
deployment {
"/masterCreatorActor/*" {
remote = "akka.tcp://RemoteActorSystem@192.168.56.101:2552"
}
"/slave1Actor/*" {
remote = "akka.tcp://RemoteActorSystem@192.168.56.102:2552"
}
"/slave2Actor/*" {
remote = "akka.tcp://RemoteActorSystem@192.168.56.103:2552"
}
}
}
アクターシステムとマスター アクターを作成するコード
val config = ConfigFactory.load("remotecreation")
val system = ActorSystem("PromoAnalysisSystem", config)
def act = system.actorOf(Props(classOf[MasterCreatorActor],OnFinished _),
name = "masterCreatorActor" )
次に、マスター アクター内で、メッセージを受信したときにこれを実行して、slave1 を使用します。
val slave1 = context.actorOf(Props[Slave1Actor],name = "slave1Actor")
slave1 ! slave1StartMessage
そのため、システムをすべて 1 台のマシンでホストできます。1 台のマシンで起動して、別のリモート マシンですべて実行することもできます。しかし、構成内の各アクターを異なるマシンで実行することはできません。
私は愚かですが、どのように見ることができません!;)