【问题标题】:How to use Appsetting configuration for Akka.Net 1.3.0 Configuration in Asp.net core如何在 Asp.net 核心中为 Akka.Net 1.3.0 配置使用 Appsetting 配置
【发布时间】:2018-01-27 05:11:52
【问题描述】:

我一直在使用 Visual Studio 2017 中支持 .NetStandard 1.6 的新版本 Akka.Net。由于 Akka.Net Configuration 的特殊性,它使用 HOCON 格式进行配置。以前的版本在 app.config 或 Web.config 中嵌入了易于阅读的 HOCON 配置。另一种选择是使用接受字符串对象的 ConfigurationFactory.ParseString 方法。但是从字符串中解析 HOCON 对于小的配置部分很方便。就我而言,我留下了这个 ParseString 配置,它甚至没有按预期工作。 我想出了这个:

 var configString = @"akka {
        log-config-on-start = on
        stdout-loglevel = INFO
        loglevel = DEBUG
        loggers= ""[Akka.Logger.Serilog.SerilogLogger, Akka.Logger.Serilog]""
        actor {

                    debug {
                        receive = on
                        autoreceive = on
                        lifecycle = on
                        event-stream = on
                        unhandled = on
                    }
              }

    akka.persistence {
        journal {
                    plugin = ""akka.persistence.journal.sqlite""

                    sqlite {
                                    class = ""Akka.Persistence.Sqlite.Journal.SqliteJournal, Akka.Persistence.Sqlite""
                                        plugin-dispatcher = ""akka.actor.default-dispatcher""
                                        connection-string = ""Data Source = F:\\SqliteDb\\Sample.db3""
                                      table-name = event_journal
                                    metadata-table-name = journal_metadata
                                    auto-initialize = on

                            }
                    }

    snapshot-store {
        plugin = ""akka.persistence.snapshot-store.sqlite""
        sqlite {
            class = ""[Akka.Persistence.Sqlite.Snapshot.SqliteSnapshotStore, Akka.Persistence.Sqlite]""
            connection-string = ""Data Source = F:\\SqliteDb\\Sample.db3""
            table-name = snapshot_store
            auto-initialize = on

        }
}

}

     ";
        var config = ConfigurationFactory.ParseString(configString);
         ActorSystem.Create("AkkaSystem", config);

没有按预期工作。 我们如何使用 appsetting.json 在 Asp.Net 核心中配置 akka.net?或者有更好的方法吗?

【问题讨论】:

  • 我现在的解决方法。我创建了一个文件。使其成为嵌入式资源。然后通过 ConfigurationFactory.FromResource("resoucefilename.txtt"); 加载它
  • 目前没有规范的方法可以做到这一点 - 我们正在讨论在即将发布的次要版本中添加一个。
  • 在这里查看我对类似问题的回答:stackoverflow.com/questions/36699889/…

标签: .net-core visual-studio-2017 akka.net .net-standard


【解决方案1】:

我将 hocon 转换为 json 并使用 ConfigurationFactory.FromObject 和一些具有我感兴趣的属性的类从 appsettings 中读取 akka-config。匿名对象模拟 hocon 根。

var config = ConfigurationFactory.FromObject(new { akka = configuration.GetSection("Akka").Get<AkkaConfig>() });

actorSystem = ActorSystem.Create("Stimpy", config);

请注意,我没有费心去弄清楚如何从 appsettings 中解析 kebab-case 属性。所以我刚刚重命名了不包括连字符的属性。然后将 JsonProperty-attribute 设置为正确的名称,以便 FromObject 可以正确反序列化它。

public class AkkaConfig
{
    [JsonProperty(PropertyName = "log-config-on-start")]
    public string logconfigonstart { get; set; }
    [JsonProperty(PropertyName = "stdout-loglevel")]
    public string stdoutloglevel { get; set; }
    public string loglevel { get; set; }
    public string[] loggers { get; set; }
    public ActorConfig actor { get; set; }

    public class ActorConfig
    {
        public DebugConfig debug { get; set; }
        public Dictionary<string, string> serializers { get; set; }
        [JsonProperty(PropertyName = "serialization-bindings")]
        public Dictionary<string, string> serializationbindings { get; set; }

        public class DebugConfig
        {
            public string receive { get; set; }
            public string autoreceive { get; set; }
            public string lifecycle { get; set; }
            [JsonProperty(PropertyName = "event-stream")]
            public string eventstream { get; set; }
            public string unhandled { get; set; }
        }
    }
}

appsettings.json:

{
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Trace"
    }
  },
  "Akka": {
    "logconfigonstart":"on",
    "stdoutloglevel":"INFO",
    "loglevel": "DEBUG",
    "loggers": [ "Akka.Logger.NLog.NLogLogger, Akka.Logger.NLog" ],

    "actor": {
      "debug": {
        "receive": "on",
        "autoreceive": "on",
        "lifecycle": "on",
        "eventstream": "on",
        "unhandled": "on"
      },
      "serializers": {
        "hyperion": "Akka.Serialization.HyperionSerializer, Akka.Serialization.Hyperion"
      },
      "serializationbindings": {
        "System.Object": "hyperion"
      }
    }
  }
}

【讨论】:

    猜你喜欢
    • 2016-05-20
    • 2020-11-19
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多