我正在研究这个用例:
其他用例信息:
我正在考虑:
似乎我们可以使用最终的一致性来实现这种用例: - 订购服务要求预算服务处理processOrder命令(通过消息或REST):此时订购服务正在等待预算服务。 - Budget Service处理命令(在本地事务中)并将OK / NOK发送给调用者 - 预算服务还会发送OrderInBudgetProcessed事件。 - 订购服务实时接收OK / NOK并通知Jane(但订单状态此时未更改) - 订购服务处理OrderInBudgetProcessed并更新本地交易中的订单状态。
我认为这可行。但是我有一些问题:
有些问题:
请纠正我错在哪里:)
期待您的回音。
弗朗索瓦
答案 0 :(得分:2)
我曾经遇到过类似的情况,这种方法就像这样:
两个有界的背景:库存和订购
当订单需要fullfilling时,订购上下文接受该命令,它将订单从WAIT_FULLFILL更新为FULLFILLING并发出OrderFullfillingRequiredEvent。
库存上下文订阅此事件并进行库存更新,然后它会发出具有订单跟踪ID的InventoryUpdatedEvent。
订购上下文订阅后一个事件并将订单从FULLFILLING更新为FULLFILLED。
如果有人想在此期间取消订单,它将被拒绝,因为现在状态为FULLFILLING,表示订单正在等待某些回复。
相当于您的用例,我认为它会添加一个中间状态WAITING_VALIDATION - > VALIDATING - > VALIDATED。
仍然需要一些补偿,因为InventoryUpdatedEvent可能永远不会到来。最烦人的问题是在ui方面,也许你需要轮询后端以使其看起来像实时。