【发布时间】:2016-05-17 09:12:54
【问题描述】:
解释我的 Akka 集群设置:
- 我在多节点 Akka 集群中有远程参与者。
- Actor 位于单例类型的路由器后面。
- 单例路由器位于集群单例代理之后。
- 另外,顺便说一句,我有 N 种演员,每个演员执行不同类型的任务并由不同的路由器管理。
代码 sn-p(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");
我的疑问是如何使地址列表成为动态列表?当前的硬编码地址列表在生产环境中不起作用。
一旦新节点加入集群,Router/ClusterSingletonManager 应该能够识别并在该新节点上创建远程参与者(它可能是添加到现有集群的全新节点,也可能是这种情况整个集群启动,第一次或在新代码部署的情况下)
就我的种子节点而言,它们在 akka.conf 文件中有所提及。
akka {
actor {
provider = "akka.cluster.ClusterActorRefProvider"
}
cluster {
seed-nodes = [
"akka.tcp://CalcSystem@127.0.0.1:2551"]
}
}
【问题讨论】:
标签: java akka akka-cluster