我正在使用DDD和事件源CQRS建立电子商务。我的想法是将微服务中的每个AR分开。
在我的AR ShoppingCart中,我需要一个带有productId和Price的VO项目,因为添加到购物车后价格不变。
我还有另一个可以控制价格的AR产品。
我的问题是,由于使用事件体系结构,如何在没有同步请求的情况下从AR产品获取价格?
答案 0 :(得分:0)
从根本上讲,您想要做的是将信息从一个聚合根复制到另一个聚合根。
您可以采用两种方法。
一种方法是从缓存的角度考虑-我们将一个域服务实例传递给购物车,该实例知道如何获取相关ID(产品代码?)并获得价格的缓存副本。因此,我们有一个后台过程,将定价信息从定价微服务复制到购物车微服务,然后自主购物车依赖于其本地缓存的价格副本。
重要说明:在缓存中包含及时性元数据没有任何问题,因此,锐化工具可以包含有关缓存信息是否“过旧”的信息。
另一个更直接-有一种方法,您可以通过该方法将带有价格的命令发送到购物车,并构建一些业务流程逻辑,以观察哪些购物车需要价格,然后使用以下命令发送命令到购物车合适的价格。
答案 1 :(得分:0)
如果您有两个微服务,则可以让每个微服务发布事件流。您的ShoppingCart微服务可以使用产品微服务中的PriceChanged事件,并维护每个产品的最新价格的本地缓存。将产品添加到ShoppingCart时,您将引用本地价格缓存。
将监听事件作为一种通信手段的相同方法,从聚合间扩展到跨边界上下文或微服务间乃至系统间。根据您对价格变化的敏感性,您可能必须采用上述其他方法,但是我认为如果您选择CQRS + ES模式,您对最终的一致性会有一定的容忍度。