Max*_*mus 5 events domain-driven-design event-sourcing microservices
Let\xe2\x80\x99s 表示 Checkout 有以下服务:
\n\n订单服务,创建订单并收取运费、付款和下订单并管理订单的生命周期。
库存服务,提供产品的可用性。
运送服务,提供运送选项和费用
客户档案服务,提供客户信息。
信用服务、支付授权
预订服务进行预订
以下是订单创建的流程:
\n\n创建订单,用户提供送货地址,计算送货选项,收取付款并下订单并向用户显示确认信息。
\n\n许多零售商的结账都是同步和订单服务编排的。
\n\n让\xe2\x80\x99s 说,如果我们使用事件源、CQRS 和事件存储,订单服务会创建一个订单事件并保留在事件存储中,发布域事件以及订阅事件存储的所有其他服务,因为它们需要更新交付选项、运输成本、完成订单的付款以及使用 CQRS 通知用户每个步骤的状态以供他查看。
\n\n我试图理解:
\n\n结帐应用程序的所有结帐域事件(例如添加送货地址、预订、交付选项选择、添加付款和完成订单)有多复杂?
\n\n它会比协调结帐请求的订单服务的同步操作更快吗?
\n\n万一失败的话最终会保持一致性吗?如何处理永远一致性?
\n我们可以使用事件溯源和 CQRS 来进行检查流程。就像您所说的,您将发起事件,订阅的服务将对此做出反应。问题有多复杂或多简单都不是问题,在您的情况下值得吗?事件溯源和 CQRS 是复杂的模式,具有许多优点,但您需要以正确的方式实施它。
为了最终的一致性,您可能必须依赖 Saga 模式,在失败的情况下,您将不得不采取回滚的补偿操作。
| 归档时间: |
|
| 查看次数: |
1361 次 |
| 最近记录: |