2016-05-17 7 views
0

Объясняя мой Akka настройки кластера:Как создаются удаленные актеры при объединении новых узлов в akka?

  • У меня есть удаленные актеры в мульти узле Akka кластера.
  • Актеры находятся за маршрутизатором, который имеет тип Singleton.
  • Singleton Router находится за прокси-сервером Cluster 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"] 
    } 
} 

ответ

0

Ashish - будет ли это работать для вас http://letitcrash.com/post/35055573978/21-spotlight-cluster-aware-routers. «Простой способ масштабирования на нескольких машинах - использовать кластерные маршрутизаторы. Добавить новый узел в кластер и он будет автоматически участвовать в качестве рабочего. Позже вы можете закрыть узел, и он будет удален из маршрутизатора».