Scala 在没有新ActorSystem的情况下远程创建Akka actor
我已经阅读了几次文档()和这里的示例()以及其他内容,但我仍然不知道如何做我想做的事情。我找到的最接近的答案是:,但这似乎比我想象的要麻烦得多 我有12台机器要处理。我想提出以下几点:Scala 在没有新ActorSystem的情况下远程创建Akka actor,scala,jvm,akka,actor,remote-actors,Scala,Jvm,Akka,Actor,Remote Actors,我已经阅读了几次文档()和这里的示例()以及其他内容,但我仍然不知道如何做我想做的事情。我找到的最接近的答案是:,但这似乎比我想象的要麻烦得多 我有12台机器要处理。我想提出以下几点: val system = ActorSystem("DistributedSystem", ConfigFactor.load.getConfig("distsys")) val master = system.actorOf(Props(new Master(...)), "master") override
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")
}
}
然后在主控器内部,沿着以下路线:
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")
}
}
覆盖def preStart()={
对于(i,我认为听起来您想要做的是将一组参与者部署到一组远程节点,然后将它们放在本地路由器后面,将消息传递给路由器,让路由器将工作分配给远程节点。要做到这一点,您可以尝试以下方法:
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)))
val地址=用于(i)如果您不想在目标节点上启动JVM,那么您希望它如何工作?必须有一个Akka系统在一个节点上启动并运行,您希望在该节点上进行远程部署,并且该远程系统还必须配置远程处理,以便其侦听此类请求。您所要做的就是这样,其余的可以是JU不要这样说,当你启动一个特定的参与者时,它的目标是一个特定的远程节点。考虑到引擎盖下实际发生的事情,这很简单。你是否希望Akka为你神奇地启动远程节点上的JVM?我删除了这部分问题。我不知道我在期待什么。我只需要一个se吗为我可能想要生成ActorSystem的每台机器分离部分配置?或者因为它们都在做相同的事情,我的ip地址遵循192.168.1的格式。{n}当n从1到12时,它能动态地计算出它运行的主机是什么吗?这样在我的本地程序中,我就可以通过使用第n个远程参与者在主机192.168.1上的规则来访问远程参与者。{n}?我说得通吗?