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)))

这假设您在这些节点上运行 Akka,并且它正在使用ActorSystemRemoteSys端口 2553 配置的远程处理。当您向该routerRemoteref 发送消息时,它现在将在您的 12 个工作节点之间循环路由消息。

于 2013-06-19T16:01:42.183 回答