我设置应用程序的方式是使用aggregateview将所需数据持久化到数据库中。因此,现在我感觉事件只是存储在事件存储区中,并且只在调用命令后用于重新创建聚合。对于正在存储的事件和集合的重新创建,我难道没有其他事情要做吗?例如,我是否应该重新创建整个聚合,而不是按ID从数据库中取出aggregateview来更新它。
事件源集合背后的思想是,这些事件是系统中任何模型的源。
因此,如果您创建一个专用的命令模型来处理您所描述的命令,那么这个模型(从Axon的角度来看,它是@aggrege(Root)
注释类)将来自它发布的事件。
此外,您可以引入任何类型的查询模型;一个RDBMS视图,一个基于文本的搜索解决方案(例如Elastic),一个时间序列数据库,随便你怎么说。但是,这些查询模型中的任何一个仍然是聚合所在的根应用程序的一部分。由于您将事件作为通知其他人正在做出决定的手段,因此很自然地使用这些事件来更新您的所有查询模型。
您永远不会倾向于将聚合重新创建为命令模型,因为框架为您做了这件事。如果您有一个镜像查询模型聚合,那么每当您在模型中添加/删除/更改字段时,您将重新创建该聚合。或者,如果您已经引入了全新的模式。
每次调用命令时重新创建聚合的好处是什么?
每次重新创建它的好处是保证您将始终使用最新的状态。即使在应用程序发布期间,您已经添加/更改/删除了新字段。@EventSourcingHandler
注释方法只需填充它们,而不需要编写数据库脚本在数据库级别上直接对其进行调整。
正如我在前面的回应中所分享的,可以用Axon框架建模的聚合应该在事件源设置中被视为CQRS系统中的命令模型。
命令模型的主要支柱之一是,它包含的唯一状态是决策逻辑所需的状态。更具体地说,聚合中存储的唯一状态是用于决定命令处理程序是否应该接受传入命令并作为结果发布事件的状态。
因此,在聚合标识符旁边引入的唯一字段是驱动这些决策所需的字段。这就是命令模型的目的,所以不要担心这一点。
环境设置:Axon4.4,H2Database(作为CI的一部分,我们正在进行组件测试)代码如下所示。 我使用的是一个状态存储聚合,但在Spring测试中使用嵌入式H2时,我总是随机地得到错误。在非嵌入式模式下,PGSQL DB不会出现同样的问题,但我们无法在流水线中运行它。 这有什么解决办法?我是否遗漏了一些配置或需要修复Axon代码?
我不知道如何恰当地问这个问题,但它是这样的: 我在特定事件上开始了传奇,然后我调度命令,该命令应该创建一些聚合,然后发送另一个事件,该事件将由传奇处理,以继续逻辑。 但是,每次我重新启动应用程序时,我都会得到一个错误,说序列x处的聚合事件已经插入,我想这是因为这个传奇还没有完成,当我重新启动它时,它会通过尝试创建新的聚合来再次启动它。 谢谢
任何关于如何实现这一点的指示和/或文件都将不胜感激。
Windows 用tutorial进行的操作 首先,打开tutorial目录的sample.txt文档,添加以下黑体字之后进行提交。 连猴子都懂的Git命令 add 把变更录入到索引中 commit 记录索引的状态 用tutorial2进行的操作 接下来,打开tutorial2目录的sample.txt文档,添加以下黑体字之后进行提交。 连猴子都懂的Git命令 add 把变更录入到索引中 pull
我有一个KStream,其中包含从主题到1的数据,如下所示: 和KTable,构造如下: 稍后,主题To2中出现以下消息: 现在,我希望我的KTable能够反映这些变化,并且看起来像这样: 但看起来是这样的: 我想我缩小了范围:显然聚合的只在第一次调用--之后聚合总是接收作为最后一个参数,例如。 其中,在第一次调用(通过初始值设定项创建)时为,但在第二次调用时为。 有什么想法吗? 编辑2 编辑3
我得到这个错误,而试图改变阿波罗本地状态。 错误不变冲突:应为已解析的GraphQL文档。也许您需要将查询字符串包装在“gql”标记中?http://docs.apollostack.com/apollo-client/core.html#gql 初始状态 我的突变 我的解析器 我想改变按键的局部状态,功能是 生成数据功能如下 我是阿波罗客户的新手。我不明白我做错了什么。有人能帮我解决这个问题吗?