使用 HOCON 和 C# 分配配置值

Assigning config values with HOCON and C#

我有一个像这样的 Akka ActorSystem 设置:

akka {  
  actor{
    provider = ""Akka.Remote.RemoteActorRefProvider, Akka.Remote""
      deployment {
        /remoteecho {
           remote = ""akka.tcp://Target@{0}""
      }
    }
  }
}

我想要做的是将 {0} 替换为另一个值。我发现这样做的唯一方法是使用 Typesafe for Java,但我使用的是 C#。

就像任何其他配置格式一样,HOCON 专为静态配置而设计。但是,您可以附加多个 HOCON 配置字符串作为 fallbacks,这意味着如果在顶级配置中找不到搜索到的配置键,reader 将使用下一个回退配置,以便找到正确的键值。这是一个递归操作。

如果您想动态配置这些值,您有两个选择。

  1. 如果您需要一次解析该地址,即在程序开始时,您可以直接在您的 actor 系统中初始化它 ActorSystem.Create(name, ConfigurationFactory.ParseString(hoconString))。如果你必须先初始化你的 actor 系统,你可以使用 actorSystem.Settings.InjectTopLevelFallback(ConfigurationFactory.ParseString(hoconString)) 来更新你的配置。请记住,这些更改仅在应用配置后应用。此外,一些 Akka.NET 插件可能会缓存配置设置并且可能不会对这些更改做出反应。所以要小心。
  2. 另一种方法是在创建actor时明确定义部署地址。这可以通过使用 Props class 来完成,它用于定义参与者的所有构建模式。示例:actorSystem.ActorOf(Props.Create(() => new MyActor()).WithDeploy(new Deploy(new RemoteScope(Address.Parse(remoteAddress))))).