2016-05-17 40 views
0

解釋我的阿卡集羣設置:如何在加入akka中的新節點時創建遠程參與者?

  • 我有一個多節點集羣阿卡遠程演員。
  • 參與者位於Singleton類型的路由器之後。
  • Singleton路由器位於集羣Singleton代理之後。
  • 另外,在附註中,我有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://[email protected]:2551"), 
          AddressFromURIString.parse("akka.tcp://[email protected]:2552"), 
          AddressFromURIString.parse("akka.tcp://[email protected]: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"); 

我的疑問是關於如何使地址列表中選擇一個動態的?當前的地址硬編碼列表不適用於生產。

只要新節點加入羣集,路由器/ ClusterSingletonManager應該能夠識別並在該新節點上創建遠程參與者(它可能是添加到已有羣集的全新節點,或者它可能是整個集羣啓動的情況,第一次或在新代碼部署的情況下)

就我的種子節點而言,它們在akka.conf文件中提到。

akka { 
    actor { 
    provider = "akka.cluster.ClusterActorRefProvider" 
    } 

    cluster { 
    seed-nodes = [ 
     "akka.tcp://[email protected]:2551"] 
    } 
} 

回答

相關問題