首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >文本形式的Akka.net持久性

文本形式的Akka.net持久性
EN

Stack Overflow用户
提问于 2016-07-13 16:41:54
回答 2查看 344关注 0票数 2

我使用sqlserver作为后端,在akka.net中使用持久性角色。

有没有可能用sqlserver持久化配置Akka.net,使其持久化使用文本有效负载,而不是现在的varbinary?

EN

回答 2

Stack Overflow用户

发布于 2016-07-22 14:52:42

您不能将有效负载作为文本而不是VarBinary进行持久化,因为Akka.Persistence.SqlServer使用了akka序列化机制,该机制试图为您的有效负载类型找到具体的序列化程序,该序列化程序将把您的消息序列化为字节数组,并将其存储到数据库中

代码语言:javascript
复制
var serializer = Serialization.FindSerializerFor(e.Payload);
var binary = serializer.ToBinary(e.Payload);
AddParameter(command, "@Payload", DbType.Binary, binary);
票数 3
EN

Stack Overflow用户

发布于 2018-03-09 08:05:28

简单的答案是不,真正的答案是你能做到。你需要编写自己的扩展,持久化插件。(我为Redis写了一个)。我还没有把它发布在GitHub上,因为它是我工作的公司的专利,但你可以看看这里,例如:

Redis plugin at github

看一看here for extra classes you need to implement

代码语言:javascript
复制
YourPersistenceExtension: IExtension{ ... }

YourExtensionProvider: ExtensionIdProvider<YourPersistenceExtension>{ ... }

我会给你一个非常简短的路线图,但在此之前:

Akka.Persistence包含两种类型的存储:

  1. 日志-用于在continues fashion.
  2. Snapshot中存储事件-用于存储您决定的时间点的快照,以加快恢复时间。

您可以只实现Journal,如果这适合您的需要,您不必使用快照(但建议您这样做,但对于本答案的目的,它并不重要)。

为了实现日志,您需要从Akka.Persistence.AsyncWriteJournal派生

在这里,您可以实现将事件写入/读取到SQL Server (或您选择的任何其他数据存储)的要求,您只需读取/写入您想要的任何内容,并对其进行管理。例如,在redis中,我使用排序集,因为我的参与者包含唯一的Id,所以我能够将与特定参与者相关的所有持久性事件分组到与该Id对应的单个值(排序集)中。这一点很重要,因为您希望快速而简单地恢复参与者的所有事件。此外,基类AsyncWriteJournal包含使用序列顺序表示法的方法,因此使用排序集是很自然的。在实现持久性扩展时,您应该使用这些注意事项。

文档可以在这里找到:AsyncWriteJournal

您将需要使用您的类型、名称空间来配置hocon文件中日志的使用,就像您使用其他类型的数据存储配置一样。

一旦你配置了你的Journal Akka将使用你的插件在从你的PersistentActor (或派生类型)调用Persist/PersistAsync时持久化状态/事件。

我知道这听起来有点夸张,但它真的不是,特别是我在这里解释的路线图和我给你的参考,这取决于你是否真的需要它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38346696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档