2017-03-16 42 views
2

我們在多階段更新中做回滾的最佳做法?

  1. 內部服務使用,數據對象,它的屬性3方之間分佈HTTP
  2. DB

當談到更新該對象的數據,我們不想讓對象部分更新。因此,如果所有方都參與更新,將會按順序執行

1 -> 2 -> 3 

。但是如果更新在步驟1成功並在步驟2失敗,那麼我們需要回滾步驟1;如果步驟1 & 2成功,並且步驟3失敗,則應該還原步驟1 & 2。這是Spring Boot 1.4,Java 8應用程序。是否有任何優雅的方式讓我以編程方式實現它,而不是在步驟2中嘗試/捕獲& 3?

希望我解釋清楚。任何幫助/線索都深表感謝

+0

謝謝大家的幫助。在對建議的方向進行了一些思考和研究後,認爲最簡單的方法是保留恢復操作列表。這個列表在每次成功的步驟後都會增加,所以如果在中間拋出異常,我只會在恢復列表中操作這些函數。現在我的問題是,如何在java 8中創建這樣的操作列表,因爲執行操作的對象將會不同 – gigi2

+0

答案在這裏,http://stackoverflow.com/questions/42866935/create-a-list-of-方法引用與 - 不同對象物/ 42867174?noredirect = 1個#comment72922599_42867174 – gigi2

回答

0

如果我理解的很好,第一次和第二次調用超出了你的範圍,你不能像在數據庫事務中那樣輕鬆地回滾?您可以應用補償模式以補償已更新的內容。

  • 您需要在更新過程之前存儲您的對象狀態。
  • 如果在步驟2或3中出現問題,將會觸發一個補償處理程序以恢復更改(它將更新前一個狀態)。
1

有,你可以看看集成模式,以及實現這些模式對你如Apache駱駝或禮儀的產品,如騾子庫(我認爲這是昂貴的,你可能永遠選擇)或業務流程管理流程,但這些都是您需要自行設計的所有設計決策。決定不使用任何這些更重的重量方法可能是完全可以的。在整合過程中,您可以儘可能多地查看該領域,以找到合適的解決方案,但我不會花費太多時間在其中,只要弄清楚什麼會足夠好即可。

注意:你可能會發現分佈式交易的材料,你會發現有人相信他們,就像有些人相信復活節兔子是一個孩子。我不會告訴你他們不是真實的,(過去我已經收到了贊成票):),但我會說我還沒有目睹他們,也沒有期待。