SAGA 长事务补偿模式
FreeGuideOnline
11阅读
2026-07-12
function processOrder(orderDetails): try: T1: orderId = orderService.createOrder(orderDetails) // 创建订单 saveState(“ORDER_CREATED”, orderId)
T2: inventoryService.reserveStock(orderDetails) // 扣库存
saveState(“STOCK_RESERVED”, orderId)
T3: paymentService.debit(orderDetails) // 扣款
saveState(“PAYMENT_DEBITED”, orderId)
// 所有步骤成功
orderService.markCompleted(orderId)
catch error at step k:
runCompensation(orderId, lastSuccessfulStep)
function runCompensation(orderId, step): switch step: case “PAYMENT_DEBITED”: paymentService.refund(orderId) // 退款 case “STOCK_RESERVED”: inventoryService.releaseStock(orderId) // 恢复库存 case “ORDER_CREATED”: orderService.cancelOrder(orderId) // 取消订单