1. 程式人生 > >java不是分散式的兩個服務之間呼叫,如何實現事務回滾?

java不是分散式的兩個服務之間呼叫,如何實現事務回滾?

       之前開發springCloud微服務,遇到微服務之間呼叫事務回滾問題,網上瀏覽存在多種解決方案。但是最後發現,實現服務回滾的多個服務必須要在同一個註冊中心下,也就是說,必須要有一個主服務管理者所有的分散式服務。

       如果!兩個服務之間不存在任何關聯,如何實現事務回滾?

       苦思冥想,終於想到了一個不是辦法的辦法。

       在服務A呼叫服務B時,先獲取當前時間,將當前時間作為呼叫服務B的請求引數。

       服務B獲取服務A的引數時,先執行一系列邏輯業務操作,到介面執行到最後,服務B也獲取當前時間。然後和服務A請求引數

的時間做差運算。得到時間差

        我們進行服務呼叫無非是使用rest或者rpc  ,可以設定呼叫介面限時。

        在服務B判斷得到的時間差是否大於等於介面限時,如果大於等於則服務B丟擲異常,由於服務B丟擲了異常,則呼叫者服務A‘

也自然丟擲異常,這樣就避免了因為網路延遲,或者業務複雜執行時間長而造成的事務為題。

        當然這樣做,被呼叫服務需要寫判斷程式碼。