我想做的是:
1)在服务器上创建一个主actor,它可以在10台不同的机器上动态创建10个远程actor
2)主actor将任务分配给10个远程actor
3)当每个远程演员完成他们的工作时,他们将结果发送给主演员
4)主actor关闭整个系统
我的问题是:
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 编写分布式程序。所以我真的需要你的帮助。非常感谢。