Я пытаюсь создать экземпляр системы актера с нестандартным поведением (например, кластеризация или удаленное взаимодействие), но независимо от того, что я делаю, ActorSystem
всегда заканчивается настройкой по умолчанию. Объект конфигурации и объект настроек выглядят корректно (например, actor.provider == cluster), но фактический объект времени выполнения всегда имеет значения по умолчанию.
Я пытался создать конфигурацию многими различными способами. С помощью App.config cdata, вручную анализируя файл конфигурации с ConfigurationFactory
и передавая его в Create. У меня была проблема с 1.4.3 и с 1.3.17.
Я скачал исходный код Akka и отладил его. Пройдя по методу Create, я обнаружил, что словарь предметов root HoconObject
содержит 2 записи с ключом "akka". Одна запись моя, другая выглядит как запасной вариант. Метод getter разрешает запасной вариант.
Я предполагаю, что происходит странное форматирование строки ...
[Обновить] Там кажется, путаница о том, что на самом деле происходит. Вот снимок экрана того, как HoconObject выглядит, когда он работает:
На снимке экрана вы можете ясно видеть сингл запись в словаре элементов для "akka", для которой задано значение "provider = cluster", которое не является значением по умолчанию и поступает из файла конфигурации. На предыдущем снимке экрана показаны 2 записи, одна из которых «provider = cluster», а другая явно используется по умолчанию, которую вводит Akka. Оба ключа = "Акка". Ошибка заставляет Akka выбрать значение по умолчанию, а не переопределение.
Я понимаю, что Hocon допускает переопределения по умолчанию, но это не то, что происходит. Опять же, если вы посмотрите на исходный код HoconObject, то увидите, что снимок экрана представляет собой простой словарь. Net, называемый «Items», и TryGetValue является реализацией. Net ... а не реализацией Hocon.
Это явно ошибка синтаксического анализа, в результате которой Akka ведет себя некорректно и не выдает никаких исключений.