让我们说Checkout提供以下服务:
订单服务,创建订单并收集运输,付款和下订单,并管理订单的生命周期。
库存服务,提供产品的可用性。
运输服务,提供交货选项和费用
客户资料服务,提供客户信息。
信贷服务,付款授权
进行预订的预订服务
这是订单创建的流程:
创建订单,用户提供送货地址,计算送货选项,收集付款并下订单,并向用户显示确认。
许多零售商的结帐都是同步和订购服务编排。
让我们说如果我们使用事件源,CQRS和事件存储,那么订单服务会创建一个订单事件并保留在事件存储中,并发布域事件和所有需要更新交付选项的订阅事件存储的其他服务,运输成本,完成订单所需的付款,并使用CQRS告知用户每个步骤的状态供他审核。
我想了解:
结帐应用程序与结帐的所有域事件(例如添加送货地址,预订,交货选项选择,添加付款并完成订单)的复杂程度如何?
比订购服务协调结帐请求的同步操作要快吗?
万一发生故障,最终是否会保持一致?如何处理永恒一致性?
答案 0 :(得分:0)
那么我们可以使用事件源和CQRS进行结帐流程。就像您说的那样,您将引发事件,订阅的服务将对此做出反应。问题不那么复杂或简单,在您的情况下是否值得?事件源和CQRS是具有许多好处的复杂模式,但是您需要以正确的方式实施它。
为了最终的一致性,您可能必须依靠Saga Pattern,如果出现故障,则必须提出补偿措施以进行回滚。