2015-06-23 1 views
3

Я установил один узел Akka.Net в качестве начального узла в кластере, который я называю интерфейсом, и другого узла, который я называю backend. Во внешнем узле я настраиваю группу кластера кластера в коде, что позволяет мне отправлять сообщения от внешнего интерфейса к любым узлам, соединяющимся с ролью «бэкэнд» (в круговом режиме), и у которых есть актер в/user/бэкенд. Код, который у меня есть, что работает, выглядит так:Формат HOCON для группы кластерных маршрутизаторов?

system.ActorOf(Props.Empty.WithRouter(
    new ClusterRouterGroup(
     new RoundRobinGroup("/user/backend"), 
     new ClusterRouterGroupSettings(10, false, "backend", ImmutableHashSet.Create("/user/backend")) 
))); 

Теперь я хочу, чтобы переместить эту конфигурацию в файл конфигурации вместо (hocon). Как я могу это сделать, так что мне нужен только следующий код для его создания?

system.ActorOf(Props.Empty.WithRouter(FromConfig.Instance), "backend"); 

Моя попытка позволила получить исключения без каких-либо указаний.

/backend { 
    router = round-robin-group 
    routees.paths = ["/user/backend"] 
    cluster { 
    enabled = on 
    max-nr-of-instances-per-node = 1 
    allow-local-routees = off 
    use-role = backend 
    } 
} 

Любые хорошие намеки? Единственная информация, которую я получаю за исключением:

Configuration problem while creating [akka://ClusterSystem/user/backend] with router dispatcher [akka.actor.default-dispatcher] and mailbox and routee dispatcher [akka.actor.default-dispatcher] and mailbox []. 
+0

Вы можете вставить весь раздел HOCON? – AndrewS

ответ

4

Трудно сказать, не видя полную конфигурацию HOCON. Похоже, вам просто нужен групповой маршрутизатор с кластерами. Ничего очевидного не выскочит на меня, но вот несколько вещей, которые приходят на ум, когда я начну искать:

  1. Вы указали свой узел семени? frontend также нуждается в семенном узле. Он будет «объединяться», чтобы запустить кластер.
  2. Дважды проверьте, что у вас есть все необходимые элементы для Akka.Cluster в HOCON, включая указание akka.cluster и akka.remote разделов HOCON.
  3. Конфигурация для /backend внутри надлежащей секции HOCON? Необходимо находиться в akka.actor.deployment.
  4. Для группового маршрутизатора вам не нужен флаг max-nr-of-instances-per-node. Это для пустых маршрутизаторов, чтобы ограничить количество маршрутов, которые они развертывают на данном узле кластера.

Вот пример конфигурации, который должен работать на узле frontend, основываясь на том, что я вижу. Но было бы полезно, если бы вы могли добавить свой полный HOCON.

akka { 
    actor { 
     provider = "Akka.Cluster.ClusterActorRefProvider, Akka.Cluster" 
     deployment { 
      /backend { 
       router = broadcast-group 
       routees.paths = ["/user/backend"] 
       cluster { 
        enabled = on 
        allow-local-routees = on 
        use-role = backend 
        } 
       } 
     } 
    } 

    remote { 
     log-remote-lifecycle-events = DEBUG 
     helios.tcp { 
      hostname = "127.0.0.1" 
      port = 0 
     } 
    } 

    cluster { 
     seed-nodes = ["akka.tcp://[email protected]:1234"] # specify your full frontend seed node address here 
     roles = ["frontend"] 
     auto-down-unreachable-after = 30s 
    } 
} 
+1

Спасибо, Андрей! Моя проблема была №3 в вашем контрольном списке, раздел развертывания был снаружи, а не внутри раздела актера в конфигурации. После исправления, что все работает нормально. Еще раз спасибо! – NeoDarque

+0

Этот ответ помог мне, но я не понимаю, что '/ backend {' относится к разделу развертывания. Возможно, это имя актера или роль? – Confused