【问题标题】:Doing explicit replays in axon 3.x在 axon 3.x 中进行显式回放
【发布时间】:2017-07-04 15:14:20
【问题描述】:

我最近一直在尝试轴突并阅读了很多东西。据我了解,事件溯源的概念是说系统状态是从事件存储中重建的,而 CQRS 更新可以用命令端查询的视图模型是不可查询的。

  1. 每次 UI 请求某些信息时,我都希望自己实现状态的重建。我已经实现了事件处理器并看到了它的重放能力。但是,我似乎找不到任何证据表明轴突允许根据用户需求触发重播。因此,我在这里询问是否可以亲自触发重播以构建 UI 所需的 DAO 或 axon 仅支持 CQRS 方式。

  2. 当 axon 进行重放时(当令牌被删除时),它是从快照表中读取(如果已实现),然后从事件表中读取,还是总是从时间的开头开始?

【问题讨论】:

    标签: axon


    【解决方案1】:
    1. 如果您希望重建查询端,目前可以手动删除令牌。 因此,如果您想触发重播,则必须添加一个为您执行此操作的组件。 这也可能是一个棘手的过程,因为您可能不希望任何其他方在重建时尝试访问您的视图。 请注意,为此,您确实需要将事件处理组件放在TrackingEventProcessor 中,否则它不会以TrackingToken 的形式记住它处理了多少事件。

    2. 快照表用于聚合以简化加载过程。当您将 axon 设置为使用 (Caching)EventSourcingRepository 时,它将首先加载基于快照的聚合,然后获取剩余事件。 因此,回答您的第二个问题:当您删除令牌时,它将从时间开始时从域事件条目表中读取。

    希望这会有所帮助!

    更新

    对于那些在 Axon Framework 中寻找回放支持的人,建议查看参考指南的this 页面。它描述了为流式事件处理器构建的重播支持(如TrackingEventProcessor)。

    【讨论】:

    • 谢谢史蒂文。由于通过快照使聚合加载变得高效,我想利用它。我想要做的类似于聚合所做的,即从事件存储中即时重建物化视图,而不是将其存储在数据库中(ES 方式)。您是否知道任何此类实施的示例,或提出的建议?
    • 嗯我不熟悉你想要的开箱即用的例子,但我想说复制EventSourcingRepository 所做的以满足你的需求听起来是最好的方法。我曾经做过一个ReplayingRepository,它基于aggregateIdentifierEventStore 中抓取一个事件流,并针对EventListener 重播这些事件。如果您打算采用该方法,您可以创建自己的事件处理类并使用AnnotationEventListenerAdapter 将其包装在EventListener 中。然而,这不支持快照位!
    • 截至 2021 年的任何更新(Axon Framework 4.5)...我在想至少如果特定投影所需的所有数据都在聚合快照中,它会好得多使用最后一个聚合快照属性“重新播种”投影数据库(在重置后删除它),然后重播所有后续事件......(不适用于视图他聚合的派生或外部字段......但是......)
    • Axon 的事件溯源解决方案基本上每次都是对您的命令模型的重新创建。 Axon 支持此级别的快照以优化加载(因此,重播)。 Axon 不支持查询端(手头的主题)的这一点,因为没有任何东西规定查询模型仅基于单个聚合流。所谓的排序,很多时候就是聚合流,是的,但这并不能确定。因此,目前,重放单个查询模型是一些方便的工作人员用户需要自己做的事情。
    • 尽管如此,自从回答了这个问题后,回放支持肯定得到了扩展。查看参考指南中的此页面以了解有关事件处理器重放的更多信息 - docs.axoniq.io/reference-guide/axon-framework/events/…
    猜你喜欢
    • 1970-01-01
    • 2018-08-12
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2020-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多