私がやりたいことは次のとおりです。
1) 10 台の異なるマシンで 10 個のリモート アクターを動的に作成できるサーバー上にマスター アクターを作成する
2) マスター アクターが 10 人のリモート アクターにタスクを分配する
3) すべてのリモート アクターが作業を終了すると、結果をマスター アクターに送信します。
4) マスター アクターがシステム全体をシャットダウンする
私の問題は次のとおりです。
1) マスター アクターの設定方法がわかりません。以下は私のサーバー パーツ コードです。
class MasterAppliation extends Bootable{
val hostname = InetAddress.getLocalHost.getHostName
val config = ConfigFactory.parseString(
s"""
akka{
actor{
provider = "akka.remote.RemoteActorRefProvider"
deployment {
/remotemaster {
router = "round-robin"
nr-of-instances = 10
target {
nodes = ["akka.tcp://remotesys@host1:2552", "akka.tcp://remotesys@host2:2552", ....... akka.tcp://remotesys@host10:2552"]
}
}
}
remote{
enabled-transports = ["akka.remote.netty.tcp"]
netty.tcp{
hostname = "$hostname"
port = 2552
}
}
}""")
val system = ActorSystem("master", ConfigFactory.load(config))
val master = system.actorOf(Props(new master), name = "master")
def dosomething = master ! Begin()
def startup() {}
def shutdown() {
system.shutdown()
}
}
class master extends Actor {
val addresses = for(i <- 1 to 10)
yield AddressFromURIString(s"akka://remostsys@host$i:2552")
val routerRemote = context.actorOf(Props[RemoteMaster].withRouter(
RemoteRouterConfig(RoundRobinRouter(12), addresses)))
def receive = {
case Begin=>{
for(i <- 1 to 10) routerRemote ! Work(.....)
}
case Result(root) ........
}
}
object project1 {
def main(args: Array[String]) {
new MasterAppliation
}
}
2) リモート クライアントでリモート アクターを作成する方法がわかりません。このチュートリアルを読み ました。サーバー部分と同様にクライアント部分を作成する必要がありますか? つまり、リモート アクターの作成を担当するオブジェクトを作成する必要がありますか? しかし、これは、クライアント部分を実行すると、リモート アクターが既に作成されていることも意味します。私は本当に混乱しています。
3) システム全体をシャットダウンする方法がわかりません。上記のチュートリアルでは、shutdown() という名前の関数があることがわかりましたが、誰もそれを呼び出していません。
Scala と AKKA で分散プログラムを作成するのはこれが初めてです。だから私は本当にあなたの助けが必要です。どうもありがとう。