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