補償與回滾不同,因為它是一種當工作流中發生違反規則的情況時,取消已成功完成和提交的事務所產生的影響的有效方法。在兩個帳戶間進行資金劃轉的事務是一個典型的回滾示例。第一個調用將資金從一個帳戶中取出,第二個調用將相同數額的資金劃轉至另一個帳戶。只要數據庫支持兩階段提交模型,如果在事務中引發異常,回滾可恢復一致的狀態。
設想一下一個訂單處理工作流,其中一個事務被用于通過信用卡進行支付。第一步,首先從信用卡中提取資金來支付貨款。然后,在交易成功完成后,該貨物不能再被銷售。如果違反了業務規則,需要按照合適的規定對交易結果進行補償 — 一般是將資金劃入簽帳卡。
??
補償就是一次真正的操作,只是上一次操作的反操作。
?????
?? 而回滾是一個取消動作,即取消上一次還沒有完成的操作 ;要能作回滾,就必須鎖定資源啦