我正在設計一個服務,它依賴於兩個(甚至有時甚至是三個)SOAP服務進行更新。流動例如可以是這樣的:作爲一個「事務」的兩個SOAP服務的首選設計
- 系統我的SOAP客戶端調用customerUpdate一個
- 在系統B我的SOAP客戶端調用customerUpdate
大多數情況下,這工作正常,系統會非常穩定(99%的正常運行時間是目標),但總是會有1%。我怎樣才能使這個接近交易。
我一直在尋找一些文學或一些類似的設計經驗,但迄今沒有成功。
問題是我應該如何通知我的服務的調用者如果SOAP調用1正常,但調用2失敗。
到目前爲止,我看到了以下解決方案:
- 我作出這樣告訴發生了什麼用戶一個錯誤信息:系統A更新,但系統B沒有。他們必須重新發送以更新兩個系統。
- 我爲失敗時的更新創建一個隊列,並給出一個SOAP響應,告訴用戶系統B離線/無響應但將被更新,系統A已更新。
有沒有人偶然發現這種情況下的測試設計模式?或者也許有經驗的人可以指出我正確的方向,哪一個應該是首選?哪一個更容易維護?
我知道這可能會導致更多的討論,而不是有針對性的問題,但我希望這是可以的。
我喜歡你的建議,在服務器端處理事務的捆綁,這是我想要的。但是在XA數據源設計中,捆綁的底層服務並不適用。我仍然會遇到一些情況,我打電話給系統A,然後B失敗,而我沒有適當的方法來回滾A.關於「在交易中間丟失」,我有一個非常好的觀點,所以現在我傾向於另一種選擇是,當重新請求進來時,它將不得不檢查A的結果是否先前存在,或者可能重新更新A.但是對於調用者而言仍然是混亂的。 – Vegard
我已經更新了關於第一個解決方案的答案。準備好自制交易可能具有挑戰性。 – Beryllium
好主意,我喜歡這個建議,但我有點擔心它爲我的服務的客戶增加了額外的「噪音」。 – Vegard