2016-11-04 9 views
0

При настройке кластер маршрутизации в конфигурационном файле с помощью:Настройка Akka ClusterRouting программно

akka.actor.deployment { 
    /jobDispatcher/singleton/workerRouter { 
     router = round-robin-pool 
     nr-of-instances = 5 
     cluster { 
      enabled = on 
      max-number-of-instances-per-node = 1 
      allow-local-routees = on 
     } 
    } 
} 

Я могу поиск маршрутизированного работника с помощью:

ActorRef actor = context().actorOf(// 
    FromConfig.getInstance().props(// 
    Props.create(MyRoutedActor.class)), // 
    "workerRouter"); 

Я предпочел бы настройки пула программно, так как я хочу чтобы скрыть данные от моего пользователя.

Однако с помощью:

ActorRef actor = context().actorOf(new ClusterRouterPool(new RoundRobinPool(5), // 
    new ClusterRouterPoolSettings(100, 1, true, "")) // 
    .props(Props.create(MyRoutedActor.class)), 
    "workerRouter"); 

не маршрутизировать вызовы на Routees в кластере (только локальный

Как настроить правильно маршрутизации

ответ

1

Попробуйте использовать ClusterRouterPool

.?

Akka doc говорит [http://doc.akka.io/docs/akka/2.4/scala/cluster-usage.html]:

Пул - маршрутизатор, который создает маршруты как дочерние субъекты и развертывает их на удаленных узлах. Каждый маршрутизатор будет иметь свои собственные экземпляры маршрутов. Например, если вы запустите маршрутизатор на 3 узлах кластера из 10 узлов, вы получите 30 маршрутов, если маршрутизатор настроен на использование одного экземпляра на узел. Маршруты, созданные разными маршрутизаторами, не будут использоваться совместно с маршрутизаторами. Одним из примеров использования для этого типа маршрутизатора является один ведущий, который координирует задания и делегирует фактическую работу маршрутам, выполняемым на других узлах кластера.

Пример http://doc.akka.io/docs/akka/2.4/java/cluster-usage.html#Router_with_Pool_of_Remote_Deployed_Routees

akka.actor.deployment { 
    /statsService/singleton/workerRouter { 
     router = consistent-hashing-pool 
      cluster { 
      enabled = on 
      max-nr-of-instances-per-node = 3 
      allow-local-routees = on 
     use-role = compute 
     } 
    } 
} 

код, чтобы сделать программно (также Акка документы):

int totalInstances = 100; 
int maxInstancesPerNode = 3; 
boolean allowLocalRoutees = false; 
String useRole = "compute"; 
ActorRef workerRouter = getContext().actorOf(
    new ClusterRouterPool(new ConsistentHashingPool(0), 
     new ClusterRouterPoolSettings(totalInstances, maxInstancesPerNode, 
     allowLocalRoutees, useRole)).props(Props 
    .create(StatsWorker.class)), "workerRouter3"); 

У меня есть AKKA кластера в Скале, и это мой код:

val workerRouter = context.actorOf(
    ClusterRouterGroup(AdaptiveLoadBalancingGroup(MixMetricsSelector), ClusterRouterGroupSettings(//RoundRobinGroup(Nil) 
    totalInstances = 1000, routeesPaths = List("/user/worker"), 
    allowLocalRoutees = true, useRole = Some("workerRole"))).props(), 
name = "pool") 
+0

Не знаю, что было не так с моей инициацией л. Однако, похоже, вы работаете, – herzrasen