我正在尝试基于CQRS原理设计体系结构。 要求之一是能够随着时间的推移为基于现有事件日志的查询子系统引入新的预测。为此,我需要能够遍历存储在数据存储中的所有事件记录。轴突可以吗?
答案 0 :(得分:3)
在Axon中这绝对是可能的。
在这种情况下,要寻找的关键字是TrackingEventProcessor
。
Axon中的EventProcessors
负责处理将事件传递到您正在编写的事件处理程序的技术方面。
TrackingEventProcessor
自己通过从EventStore
检索事件流来做到这一点。由于您的应用程序可以启动/停止/暂停/等,因此TrackingEventProcessor
也应该是可停止的。因此,尽管如此,您希望TrackingEventProcessor
从上次停止的那一刻起重新开始。
因此,在处理事件流中的事件方面,它必须保持跟踪。通过保持TrackingToken
来完成“保持跟踪”,该TrackingToken
包含上一个事件的索引(并取决于TrackingToken
的实现以及其他信息)。
可以根据您的事件流在任何时间设置此令牌。
因此,它将允许您针对其更新的给定查询模型启动重播/重置。或者,如果您每次启动时都需要获取查询模型,则可以仅将EventSourcingRepository
保留在内存中。这样可以确保在启动时它将从时间开始读取事件。
有关Axon中事件处理器的更多信息,我建议使用reference guide。
旁注:
尽管如此,我想指出的是,事件源 中最难的部分不在于应用程序的查询方面。这部分始终是整个事件流中的水分。但是,事件源命令模型完全不同。为此,Axon提供了Foo
来存储您的聚合。