vic*_*oft 4 akka.net .net-core visual-studio-2017 .net-standard
我一直在使用 Visual Studio 2017 中支持 .NetStandard 1.6 的 Akka.Net 新版本。由于 Akka.Net 配置的特殊性,它使用 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);
Run Code Online (Sandbox Code Playgroud)
这没有按预期工作。我们如何使用appsetting.json在Asp.Net core中配置akka.net?或者有更好的方法吗?
我将 hocon 转换为 json 并使用 ConfigurationFactory.FromObject 和一些具有我感兴趣的属性的类,从 appsettings 读取 akka-config。匿名对象模拟 hocon 根。
var config = ConfigurationFactory.FromObject(new { akka = configuration.GetSection("Akka").Get<AkkaConfig>() });
actorSystem = ActorSystem.Create("Stimpy", config);
Run Code Online (Sandbox Code Playgroud)
请注意,我没有费心去弄清楚如何从应用程序设置中解析 kebab-case 属性。所以我刚刚重命名了不包括连字符的属性。然后将 JsonProperty 属性设置为正确的名称,以便 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; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序设置.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"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2289 次 |
| 最近记录: |