[问题] 为什么目录在验证时不减少库存,会不会导致"超售"?
作者: FlorentBunjaku1创建于 2025年9月1日更新于 2025年12月12日
我正在检查订单完成流程时注意到,当 `OrderStatusChangedToAwaitingValidationIntegrationEvent` 由 `Catalog` 服务消费时,它会进行检查(不锁定 DB),以查看订单中的商品是否有库存。如果有库存,则会发布 `OrderStockConfirmedIntegrationEvent`,并处理付款。之后, `OrderStatusChangedToPaidIntegrationEvent` 会被发布并由 Catalog 服务处理,这是实际从订购的商品中减少库存的地方。在我看来,这可能会在处理同一产品的两个 `OrderStatusChangedToAwaitingValidationIntegrationEvent` 事件时或当其中一个事件已经接近完成付款过程时导致问题。这可能会导致“超售”。一个简单的解决方案是,在 `Catalog` 处理 `OrderStatusChangedToAwaitingValidationIntegrationEvent` 时立即删除库存,这也会锁定 SQL 中的行。我知道这并不是什么大问题,因为这只是一个参考应用程序,但我很想知道为什么它是这样设计的,而不是在验证期间“预留”库存,然后在付款失败时再次添加。
内容来源: dotnet/eShop