feign分佈式事務

一 問題:

微服務中,某事務內通過feign調用多個api,但Transcational註解的事務只對本服務的流程有效,feign調用的接口不會回滾。爲使feign調用目標參與事務,需使用分佈式鎖。

二 結構

原有結構:註冊中心、調用者、被調用者

需新增:tx微服務,配套的一個數據庫表,配套的redis服務,不需註冊至註冊中心。調用者、被調用者使用指定註解實現分佈式鎖。

三 原理

tx-manager基於redis,通過獨立的微服務建立事務組,協調調用、被調用者的事務。

tx微服務默認監聽8070端口,可手動設置;自定義微服務添加依賴後默認連接8070端口與tx微服務通信,可手動配置。

調用者發起分佈式事務後,通知tx微服務建立事務組,並得到groupid。被調用者參與事務組,並向tx微服務發送事務執行情況。最終所有事務執行完成,關閉事務組,或發生異常後全部回滾。

若事務中發生網絡問題,某步事務組通信無響應,則tx微服務記錄此次失敗,進入補償機制,通過自定義的回調函數發送通知。若配置了自動補償,則會將執行了的事務回滾、未執行的事務不操作、重新執行事務組。

四 實現

https://blog.csdn.net/jingYang07/article/details/100122897  親測可用。需去掉兩句hibernate配置,可自定義監聽ip和端口

五 補充

1 後臺管理頁面時http://lcn服務端地址:服務端配置的接口/  密碼codingapi

2 還是別用默認的8070端口了,比如apollo也用這個端口,會衝突

服務端配置  tx-lcn.manager.port=8071

客戶端配置 tx-lcn.client.manager-address = 127.0.0.1:8071

3 就算配置了其它監聽端口,觀察控制檯也會發現啓動後先連上指定端口,然後再去連8070,重試⑨次失敗後才確認只有一個服務端。若使用默認8070且與apollo衝突,則會看到連接失敗,重試⑨次後還是失敗,然後一大堆線程報錯,這時雖然一般的api可以正常用,但涉及分佈式事務的api統統報錯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章