我目前正在開發一個SOA項目。如何在SOA架構中使用事務和回滾
我開發了一些處理鏈,也就是一個Web服務,一個ESB在Java中內鏈的Web服務。
由於每個網絡服務鏈可以拋出不同的異常,我想過使用交易能夠回滾網絡服務的行爲。
但是,我不知道這是甚至可能在SOA環境中每個服務都不同時。我搜索了它,發現了一些關於AtomicTransactions的信息,但我不確定它可以用來解決我的問題。
最後,我的問題是它實際上可以回滾服務?如果是這樣,我該如何設置它?
在此先感謝。
我目前正在開發一個SOA項目。如何在SOA架構中使用事務和回滾
我開發了一些處理鏈,也就是一個Web服務,一個ESB在Java中內鏈的Web服務。
由於每個網絡服務鏈可以拋出不同的異常,我想過使用交易能夠回滾網絡服務的行爲。
但是,我不知道這是甚至可能在SOA環境中每個服務都不同時。我搜索了它,發現了一些關於AtomicTransactions的信息,但我不確定它可以用來解決我的問題。
最後,我的問題是它實際上可以回滾服務?如果是這樣,我該如何設置它?
在此先感謝。
使用服務之間的交易是不是一個很好的做法,你正在爲不一定是值得信賴的部件舉着資源,再加上服務流程通常是長時間運行的(我更「transactional-integration anti-pattern寫道:」這件事。
正如在評論中提到人,我發現「saga pattern」是一種更好的方式來處理這些長期運行的交互
謝謝。我搜索了「saga模式,如果我理解正確,這意味着我必須補償服務所做的操作。服務是否需要一種方法來取消服務方法?例如,執行add()方法時,當拋出一個異常時,它是否必須在服務上調用aremove()方法?還是有其他方法可以實現這一點?有關信息,我們的項目使用編排組件來調用不同的服務 – qbisson
如果您正在編排你可以從外部調用對服務的反向操作,另一種方法是讓外部協調器協調事件並讓服務知道它失敗,然後每個服務都可以在內部盡最大努力處理失敗。回滾或以某種其他方式進行補償。如果租約未續約和/或未成功完成交易,服務也可以保持承諾並獨立回滾 –
謝謝。我們將嘗試在我們的項目中實現這一點。我會嘗試更深入地調查佐賀模式。 – qbisson
我覺得整個的想法不好的最好。 SOA和交易一直是一個巨大的頭痛。 倡導一組服務的逆向行爲也可能失敗!那麼你會怎麼做?
我知道一個很著名的媒體公司,在英國,有一個專門的海外團隊,按摩數據,由於整個網絡服務,其中,博格爾斯頭腦編排故障。
最後,OEM BPM引擎作爲協作型我覺得可能是依賴於工作概念的股的能力。但是,這個話題一直令人驚訝,仍然是一個問題。
我不明白爲什麼你會認爲在SOA架構中進行事務會很糟糕。我真的認爲應該有辦法做到這一點,也許在協議中添加跨服務交易的概念,而不必自己實現它。現在,我知道這不是一件容易的事,因爲仍然會有其他問題,但是如何保持應用程序的完整性? – qbisson
嗨。其實我不認爲他們是壞的。我只是說,做一個補償不是一個好主意。此外,只是發現我的答覆實際上是錯誤的。從我最後一次參加SOA項目開始,OASIS的交易標準就是用Oracle Weblogic 11實現的,例如:http://docs.oasis-open.org/ws-tx/wstx-wsat-1.2 -spec-CS-01/wstx-WSAT-1.2規格-CS-01.html – Beezer
我一直在研究這個問題,發現人們使用佐賀模式。這不是一個完整的答案,所以把它置於評論。 http://arnon.me/soa-patterns/saga/ – ReVolly
只是一個問題,但你看過JTA? – Namphibian
我沒有使用過JTA,但可以在分佈式環境中使用它嗎?我認爲必須採取不同的方式來解決問題,因爲這些問題有所不同。你有任何可以幫助我在SOA中設置事務的鏈接,還是純JTA?有沒有特別的註釋? – qbisson