【问题标题】:Replay events from Akka.net Persistence Journal从 Akka.net Persistence Journal 重播事件
【发布时间】:2016-02-16 21:58:43
【问题描述】:

我正在使用 Akka.Net 和 Akka.Net.Persistence 和 SQL Server Journal 实现 CQRS/ES 解决方案。到目前为止,使用默认的 sql-server 插件似乎一切都很好。

最后要验证的是能够从特定 AR 重新加载/重播事件的能力,例如重建读取模型或为读取模型填充新实现的投影。我要解决的方法是从 de DB 读取事件并将它们放在事件总线上或直接放入“投影演员”的邮箱中。

我似乎找不到任何手动重新加载事件的示例,除了自己查询 Journal 表(执行 sql 查询)和使用内置序列化程序之外,我基本上被这个问题所困扰。

有没有人或多或少地尝试做同样的事情?

【问题讨论】:

    标签: akka persistence cqrs event-sourcing akka.net


    【解决方案1】:

    根据您的需要,有几种方法:

    1. 使用PersistentView - 它是一个专用的actor,它与一些特定的持久性actor相关联,它能够接收它的事件来建立一些不同的状态。它是只读的。 优点:它会根据持久参与者产生的事件保持最新状态(但是更新之间存在一些延迟)。 缺点:它与单个参与者相关,不能用于聚合来自多个参与者的事件。
    2. 使用日志查询(仅限 SQL 日志)- 它允许您使用某些特定过滤器查询日志。 优点:它可以跨多个聚合使用。 缺点:它不会自动保持最新,您需要发送后续查询以获取更新。我不确定它是否有官方文档,但流程本身被描述为here

    PS:一些日志实现有自己的专用序列化程序,但没有基于 SQL 的序列化程序。相信我,你永远不想依赖默认序列化程序来持久化事件。

    【讨论】:

    • 感谢您的回复! PersistentView 绝对不是我想要的。我现在设置读取模型投影的方式是在 EventStream 上发布事件。投影 Actor 路由器正在订阅 EventStream 上的事件。这个设置似乎工作得很好。我要解释的问题是何时需要新的读取模型(和投影),何时需要重建读取模型。在我们自己的自定义事件存储中,我们只需从事件存储中加载所需的事件并将它们放入队列中以进行重新处理..
    • 另外,为什么不使用 Akka.Persistence.Common.Sql 的默认序列化程序?当然,在我的场景中使用我们自己的序列化程序来持久化事件会更方便..
    • 存储对象与尽可能快地通过网络发送对象具有不同的特性。但主要原因是默认序列化程序可能(并且很可能会)在 Akka.NET 的未来版本中发生更改。
    • 在 sql server 持久化中插入自己的事件序列化器最简单的方法是什么?
    • 基于 SQL 的插件使用默认的序列化机制。您可以在documentation 中了解更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2021-06-24
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多