我使用akka.net持久性在sql server数据库中存储一些消息类型。在那个业务场景中,它可行。在其他情况下,我只想使用C#.net反序列化消息,并查看不带akka.net的消息属性。怎么可能呢?
答案 0 :(得分:0)
在Akka.Persistence中使用已配置的SQL日志,所有事件数据都在用于事件源的表的Payload
列中作为序列化二进制文件登陆(在SQLServer上默认为dbo.EventJournal
)。如果您选择的数据库支持该格式,将来可以将此格式从二进制更改为JSON数据类型。
根据您使用的序列化程序,您只需通过反序列化Payload列的内容即可检索原始事件。虽然你永远不应该使用默认的序列化程序,但如果你已经这样做了,你需要知道在v1.2那时它是JSON.NET。您可以使用JsonConvert
对保留对象引用(here)进行反序列化:
byte[] payload = ...; // get bytes from Payload column
var settings = new JsonSerializerSettings {PreserveReferencesHandling = PreserveReferencesHandling.Objects};
using (var stream = new MemoryStream(payload))
using (var reader = new StreamReader(stream))
{
var domainEvent = JsonConvert.DeserializeObject(reader.ReadToEnd(), settings);
}
事件日志表的其他字段携带元数据,描述事件的总顺序(由标记功能使用),最值得注意的是,演员的持久性ID和特定事件的序列号(在上下文中单调增长)一个演员)。