Play 的一个实例!框架应用程序可以使用简单的配置连接到远程 Akka 节点(即:您的主节点)。
有两种方式:
- 覆盖默认的actor系统
- 定义一个新的actor系统
我建议你使用第二个。
在这种情况下,您必须在 application.conf 中添加类似
master {
akka {
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
transport = "akka.remote.netty.NettyRemoteTransport"
netty {
hostname = "your-master-host-name"
port = 0
}
}
}
}
然后在您的游戏中!您可以通过这种方式连接到远程主节点的应用程序
ActorSystem system = ActorSystem.create("master", ConfigFactory.load().getConfig("master"))
ActorRef master = system.actorFor("akka://master@your-master-host-name:your-master-port/user/master")
如果您更喜欢覆盖默认的 Play Akka 演员系统。以下是参考配置:http://www.playframework.org/documentation/2.0.3/AkkaCore
对于主节点和计算集群节点,我建议你使用这里描述的架构和代码:http://letitcrash.com/post/29044669086/balancing-workload-across-nodes-with-akka-2
如果您的主节点和计算节点不需要 Web 或 REST 接口,您可以将它们实现为简单的 Java 程序。
在引用的文章中,节点没有远程暴露。为此,只需在主节点应用程序中添加一个 application.conf:
master {
akka {
actor {
provider = "akka.remote.RemoteActorRefProvider"
}
remote {
transport = "akka.remote.netty.NettyRemoteTransport"
netty {
hostname = "your-master-host-name"
port = your-master-port
}
}
}
}
并用actorOf方法实例化它
ActorSystem system = ActorSystem.create("master", ConfigFactory.load().getConfig("master"))
ActorRef master = system.actorOf(new Props(Master.class), "master")
计算节点必须以与 Play 相同的方式配置!节点。
请注意,只有主节点定义了 TCP-IP 端口。非主节点使用 0 端口,这配置 Akka 为它们选择一个随机的空闲端口。这是正确的,因为您需要的唯一众所周知的 host:port 地址是主节点,每个节点在启动时都必须指向该地址。