如何在加入akka中的新节点时创建远程actor?

时间:2016-05-17 09:12:55

标签: java akka akka-cluster

解释我的Akka群集设置:

  • 我在多节点Akka群集中有远程角色。
  • 演员位于路由器后面,是Singleton Type。
  • Singleton Router位于Cluster Singleton Proxy后面。
  • 另外,在旁注中,我有N类演员,每个演员都做不同类型的任务,并由不同的路由器管理。

代码段(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"]
  }
}

1 个答案:

答案 0 :(得分:0)

Ashish - 这对你有用http://letitcrash.com/post/35055573978/21-spotlight-cluster-aware-routers。 “在多台计算机上扩展的一种简单方法是使用群集感知路由器。向群集添加一个新节点,它将自动作为工作人员参与。稍后您可以关闭该节点,它将从路由器中删除。”