解释我的Akka群集设置:
代码段(Java)
Config config = ConfigFactory.parseString(
"akka.remote.netty.tcp.port=" + 2551).withFallback(
ConfigFactory.load());
ActorSystem system = ActorSystem.create("CalcSystem", config);
Address[] addresses = {
AddressFromURIString.parse("akka.tcp://CalcSystem@127.0.0.1:2551"),
AddressFromURIString.parse("akka.tcp://CalcSystem@127.0.0.1:2552"),
AddressFromURIString.parse("akka.tcp://CalcSystem@127.0.0.1:2553")
};
ActorRef router = system.actorOf(
ClusterSingletonManager.props(new ClusterRouterPool(new RoundRobinPool(2),
new ClusterRouterPoolSettings(100, 3,
false, "")).props(
new RemoteRouterConfig(new RoundRobinPool(6), addresses).props(
Worker.createWorker())),PoisonPill.getInstance(),settings),"workerRouter");
ClusterSingletonProxySettings proxySettings = ClusterSingletonProxySettings.create(system);
ActorRef routerProxy = system.actorOf(ClusterSingletonProxy.props("/user/workerRouter", proxySettings), "routerProxy");
我怀疑如何使地址列表成为动态列表?当前硬编码的地址列表将无法在生产中使用。
只要新节点加入群集,Routers / ClusterSingletonManager应该能够识别并在该新节点上创建远程角色(它可能是添加到现有群集的全新节点,或者可能是这种情况第一次或在新代码部署的情况下启动整个集群的程序)
就我的种子节点而言,它们在akka.conf文件中提到。
akka {
actor {
provider = "akka.cluster.ClusterActorRefProvider"
}
cluster {
seed-nodes = [
"akka.tcp://CalcSystem@127.0.0.1:2551"]
}
}
答案 0 :(得分:0)
Ashish - 这对你有用http://letitcrash.com/post/35055573978/21-spotlight-cluster-aware-routers。 “在多台计算机上扩展的一种简单方法是使用群集感知路由器。向群集添加一个新节点,它将自动作为工作人员参与。稍后您可以关闭该节点,它将从路由器中删除。”