【发布时间】:2022-12-29 20:08:54
【问题描述】:
有没有办法查看存储在轴突中的聚合体的当前状态?
我们的应用程序使用 Oracle 支持的 axon 事件存储。 我尝试查询 domainevententry 和 snapshotevententry 表,但它们是空的。
【问题讨论】:
有没有办法查看存储在轴突中的聚合体的当前状态?
我们的应用程序使用 Oracle 支持的 axon 事件存储。 我尝试查询 domainevententry 和 snapshotevententry 表,但它们是空的。
【问题讨论】:
有没有办法查看存储在轴突中的聚合体的当前状态?
简而言之,是的,虽然它是不建议.当然,如果您打算使用 CQRS。 CQRS,或命令查询责任分离,规定命令模型和查询模型是分开的。
Axon 提供的聚合支持为构建命令模型提供了一种简单的方法。顾名思义,它用于命令。另一方面,您有专为查询设计的查询模型。 AxonIQ 在 CQRS 上有 this 可以说;也许这澄清了一些事情。
我尝试查询 domainevententry 和 snapshotevententry 表,但它们是空的。
这本身就很有趣!当您通过
AggregateLifecycle#apply(Object...)或EventGateway#publish(Object...)方法在 Axon 中发布事件时,发布的事件应该最终出现在您的domain_event_entry表中。如果不是这种情况,那么要么是您的 JPA/JDBC 配置有遗漏,要么是您的应用程序中发生了一些其他异常。您能否使用您看到的配置示例和/或堆栈跟踪来更新您的问题?
在本地重放生产问题
我过去所做的能够重放生产环境中发生的行为的方法是将聚合的事件流从该环境加载到本地开发/测试事件存储中。为了能够查询这个,您只需要聚合标识符。由于对聚合标识符进行了索引,因此检索特定聚合(不同名称的聚合流)的所有事件非常简单。
通过这样做,我可以在本地运行应用程序以逐步通过聚合。这样做的好处是可以准确了解哪个事件导致了哪个状态发生变化,从而导致出现问题的场景。
然而,为什么你的事件不在你的
domainevententry中,我不清楚。如果您仍然遇到问题,我仍然建议您使用项目的更多细节更新问题。
【讨论】:
Repository<A>#load(String)(其中 A 是您的聚合类)来手动加载聚合。这将为您提供 Aggregate<A> 对象,该对象又包含您的聚合。
AggregateTestFixture 验证所有命令处理程序,则不应要求您检查内部结构,因为内部结构定义了事件的结果。此外,对于事件溯源,唯一要验证的是事件,因为它们无论如何都会驱动您的聚合状态(以您喜欢的未来格式)。那么,这对您的场景有用吗,马克?