远程创建一个Akka actor,而不需要新的ActorSystem



我已经看过几次文档了(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中启动远程actor,但它似乎比我想象的要不方便得多。

我有一个由12台机器组成的集群要运行。我想要一些类似这样的东西:

val system = ActorSystem("DistributedSystem", ConfigFactor.load.getConfig("distsys"))
val master = system.actorOf(Props(new Master(...)), "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)?我现在正在努力合成一个好的解决方案。

我认为听起来您想要做的是将一组参与者部署到一组远程节点,然后将它们放在本地路由器后面,并将消息传递给路由器,并让它将工作分配给远程节点。要做到这一点,您可以尝试这样做:

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在这些节点上运行,其ActorSystem称为RemoteSys,并且它正在使用端口2553配置的远程处理。当你发送消息到routerRemote ref时,它现在将在你的12个工作节点上循环路由消息。

相关内容

最新更新