如何使用 Axon 事件源整个数据存储?

How to event source entire datastore with axon?

我正在尝试根据 CQRS 原则设计架构。 其中一项要求是能够随着时间的推移根据现有事件日志为查询子系统引入新的预测。为此,我需要能够遍历存储在数据存储中的所有事件记录。轴突有可能吗?

这在 Axon 中绝对是可能的。 在这种情况下要查找的关键字是 TrackingEventProcessor.

Axon 中的 EventProcessors 负责处理将事件传递给您正在编写的事件处理程序的技术方面。 TrackingEventProcessor 通过从 EventStore 检索事件流来自行执行此操作。由于您的应用程序可以 start/stop/pause/etc,因此 TrackingEventProcessor 也应该是可停止的。因此,您希望 TrackingEventProcessor 从上次停止的点重新开始。

因此,它 跟踪 它在处理来自事件流的事件方面的位置。 'keeping track off' 是通过保留一个 TrackingToken 来完成的,其中包含已处理的最后一个事件的索引(并且取决于 TrackingToken 的实现还有其他信息)。

此令牌可以在您的事件流的任何时间点设置。 因此,它将允许您为它更新的给定查询模型启动 replay/reset。或者,如果您每次启动时都需要获取查询模型的来源,则只需将 TrackingToken 保留在内存中即可。这将确保在启动时它将从时间开始读取事件。

有关 Axon 中事件处理器的更多信息,我推荐 reference guide

旁注: 尽管如此,抛开所有这些,我想指出事件溯源中的难点 并不 在于应用程序的查询端。这部分总是从整个事件流中得到补充。然而,命令模型的事件溯源完全不同。为此,Axon 提供 EventSourcingRepository 来存储您的聚合。