【发布时间】:2019-06-20 07:06:12
【问题描述】:
我正在研究 Axon 框架,但我在命令状态的自动持久性方面遇到了困难。
我查看了有关 command model repository 的文档,据我了解,如果我有正确的依赖关系,标准存储库的命令模型的状态应该是自动持久的。这种情绪也出现在我看过的另一个blog/tutorial 中(您可能需要向下滚动到存储库部分)。
问题是虽然我添加了axon-mongo 依赖项,但命令状态并没有自动保持。我尝试根据文档配置相关的存储库 bean,但它似乎也没有工作。我什至不确定是否需要这样做(根据我对文档的理解),如果您想查询命令状态,您主要会这样做。
虽然我知道我可以创建自己的存储库并自己保存实体(类似于this tutorial),但我宁愿不提供开箱即用的功能。
我错过了什么吗?
注意:我的 Mongo 设置似乎是正确的,因为我已经按照 documentation 设法将我的事件保存在 MongoDB 中。
更新
根据 Steven 的评论(以及随后的 cmets),我决定尝试实现一个状态存储的聚合,但是我发现聚合的(反)序列化存在问题。我已将我的 Aggregate 发送给 Steven,他已经确认它很简单,应该由 XStream (反)序列化。我还尝试使用 XStream 的独立实例对我的聚合进行序列化,并且它起作用了,这让我相信这更像是 Axon 问题而不是 XStream 问题。我还尝试使用 Jackson 和 java (de)serializers(因为它们是 Axon 提供的其他选项),我发现了类似的问题。我已经得出结论,这是一个 Axon 错误,我已停止尝试解决该问题。
【问题讨论】:
-
如果您使用事件溯源,则不应将“聚合状态”视为数据库中的文件。状态以为该聚合存储的所有事件的形式存在于事件存储中。出于性能原因,每隔这么多(可配置的)事件存储一个聚合状态的“快照”,但大多数情况下不会是当前状态。命令模型存储库将读取事件存储。将要读取的数据放入查询模型中通常是一种很好的做法。