我现在已多次阅读文档(http://doc.akka.io/docs/akka/2.1.4/scala/remoting.html)并通过此处的示例(https://github.com/akka/akka/tree/master/akka-samples/akka-sample-remote)和其他人,我仍然无法弄清楚如何做我想做的事情去做。我发现的最接近的答案是:how to start remote actors in 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而言)?我现在正努力合成一个好的解决方案。
答案 0 :(得分: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
RemoteSys
的节点上运行Akka,并且正在使用为端口2553配置的远程处理。当您向routerRemote
引用发送消息时,它现在将循环路由12个工作节点上的消息。