java - CQRS 中不同聚合之间的交互

标签 java spring-boot aggregate cqrs axon

所以我对 CQRS 有点陌生(但不完全是初学者)。我试图了解聚合交互方面的最佳实践。我读了一些关于在这些情况下使用集成事件(而不是域事件)的内容,还读了一些关于域服务(据说会链接两个聚合)的内容,但在任何地方都找不到任何好的明确答案(尤其是在 axonIQ Getting Started guide

另一个不太相关的问题是,在分层架构中,通常我们将 Controller 直接链接到服务,并且该服务可以与其他服务(或存储库)交互,而使用 CQRS 时, Controller 通常向聚合发送命令。因此,如果我的 api 调用需要与 2 个聚合交互,我是否必须构建一个中间人服务来从这 2 个服务发送命令(或监听事件)?

最佳答案

CQRS 系统中组件之间的交互可以发生在几个级别上。 思考它的方式就像 Maxime 建议的那样,通过微服务,非常清楚地展示了消息传递这一切的焦点。

无论如何,这可能只是发生在一个应用程序/单体中,该应用程序/单体具有多个聚合类型,这些聚合类型一起需要触发某些操作。

我觉得 Maxime 正在为您提供所需的答案。您向其发送命令的聚合实例独立运行,并且根本不直接相互关联。。因此,您会对事件使用react,作为启动两者之间交互的驱动力。

您可以通过使用事件处理组件来监听事件并执行您正在处理的业务事务来实现此目的。 如果业务交易稍微复杂一点,那么查看 Saga 可能是一个好的开始。

最后,您指出 Axon 引用指南的“入门”部分对此主题不清楚。我认为这是一个有效的结论,因为从 Axon 的角度来看,这不是入门指南的一部分。看看Saga指南的一部分,以了解聚合和/或有界上下文之间的交互。

关于java - CQRS 中不同聚合之间的交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55303877/

相关文章:

java - 在 Groovy 中收集执行外部命令的输出的差异

r - 如何在 R 中按组对 NA 行求和

R: "Binning"分类变量

java - Libgdx 手势监听器不适用于手机但适用于桌面

java - JNI GetMethodID 调用时出现未决异常 java.lang.ClassNotFoundException

java - Thymeleaf 图像 src + ParseException : Exception evaluating SpringEL expression: "currentUser.get(' profilePicture'). 获取 ('url' )"

spring - 如果我们在 Spring Boot 中以编程方式配置数据源,那么 Spring Boot 数据源属性会起作用吗

java - 当运行 spring Boot 应用程序时,需要一个无法找到的类型的 bean

mysql - Spring启动MongoDB配置

scala - Spark 数据帧内映射中结构数组的聚合