Axon 从聚合中删除引用项
我有一个关于以下情况的问题。假设我们有2个域和2个聚合。域A和域B是不同的微服务Axon 从聚合中删除引用项,axon,Axon,我有一个关于以下情况的问题。假设我们有2个域和2个聚合。域A和域B是不同的微服务 域A-产品聚合 域B-商店聚合 在我们的设计中,我们决定域A不了解域B。在域B中,每个商店集合都有一个或多个产品(可销售商品)的参考 如果我们想要删除一个产品,那么我们可以向域a-product聚合发送一个RemoveProductCommand 如何处理店铺更新,从可销售商品列表中删除商品?我们希望以一种“事务性”的方式来实现这一点(如果它也从所有商店中删除,则仅标记为已删除) 我已经考虑过了,我看到了4种可能的
Product
概念的。这将使您能够仅将域模型B作为独立应用程序运行
ProductRemovedEvent将使产品(域A)处于某种挂起状态,例如删除,此事件将触发Saga
Saga将在产品(域A)和ShopProduct(域B)之间进行通信:
- 接收到ProductRemovedEvent,并向车间模型发送命令
- ProductRemovedFromAllShop成功地从Shop接收到,我们向Product发送命令,将状态更新为REMOVED
- ProductRemovedFromAllShopsOn成功地从Shop接收到,我们向Product发送一个命令,将状态更新为某个错误状态或初始状态,以便进行补偿。
- 我支持选项2,但:
“A不了解域B”:选项二提升B是上游,A是下游(A取决于B,因为A向B发送命令,A订阅B的事件。这些命令和事件是B API的一部分),而不是相反。但是,这很好!A和B不是相互依赖的
另外,我会考虑在域B中引入产品的概念,例如,Sudio产品。此聚合可以链接到您的商店,以确保B域模型中不变量的安全(类似于点编号3)。这将解耦您的受限上下文:ShopProduct是ShopBoundedContext如何理解这个
Product
概念的。这将使您能够仅将域模型B作为独立应用程序运行
ProductRemovedEvent将使产品(域A)处于某种挂起状态,例如删除,此事件将触发Saga
Saga将在产品(域A)和ShopProduct(域B)之间进行通信:
- 接收到ProductRemovedEvent,并向车间模型发送命令
- ProductRemovedFromAllShop成功地从Shop接收到,我们向Product发送命令,将状态更新为REMOVED
- ProductRemovedFromAllShopsOn成功地从Shop接收到,我们向Product发送一个命令,将状态更新为某个错误状态或初始状态,以便进行补偿。