使用feign進行系統間呼叫的異常傳導

2021-10-18 16:26:51 字數 2130 閱讀 9084

最近公司使用feign作為遠端呼叫的框架,feign在http呼叫過程中還是很優秀的,自帶負載均衡功能。在系統b呼叫系統a的服務時出現一些問題,比如系統a丟擲的業務異常,

系統b無法簡單的使用@controlleradvice統一異常處理,查閱相關文件後給出以下解決方案。

自定義錯誤解碼器類,該類繼承errordecoder介面的內部類default。feign呼叫時,如果得到錯誤的status,會走我們自定義的錯誤解碼器,在自定義的解碼器裡我們可以做

相關業務邏輯,識別異常型別,有針對性的丟擲異常,丟擲的異常再被統一異常處理捕獲。

文字描述總是感覺詞不達意,直接使用共同語言溝通,上**。

異常捕獲與傳送

return responseentity.status(customhttpstatus.other_error.value).header(customhttpstatus.other_error.reason,urlencoder.encode(e.getmessage() != null?e.getmessage() : "伺服器未知錯誤","utf-8")).build();

}自定義httpstatus列舉

}自定**碼器

}}解碼器註冊

@configuration

public class feignconfig

}

業務異常封裝類

public class bus***ception extends runtimeexception 

public bus***ception(string message, throwable cause)

}

最開始我的自定義httpstatus是10001,在測試時,經常第一次能調通,之後就測試就經常出問題,客戶端呼叫時經常重試並導致讀取超時,經過排查後最終定位在自定義狀態碼有問題。我的自定義狀態碼用了保留區段1xx,向客戶端響應10001時,會被認為是要求客戶端繼續傳送請求導致feign一直重試。

快速使用Feign呼叫

必備知識 快速搭建eureka註冊中心 兩個服務 達到的效果 和正常建立普通服務一樣,但是需要向 eureka 註冊中心註冊服務,讓hello client 能夠找到該服務 enablediscoveryclient 註冊服務 相比普通的eureka client,僅僅增加了 enablefeign...

系統間呼叫

一 前言 工作上常碰到rpc,http傳輸,webservice傳輸,rest風格等詞彙,這些東西,在我看來都是系統間傳輸。那麼何時用這些,為什麼用這些,今天在這裡整理一下。二 比較 它是個文字傳輸協議,簡單,群眾基礎廣,效能比較差,http協議的資訊往往比較臃腫,傳輸速度一般。但靈活度方面,它不關...

feign呼叫檔案上傳的介面,需要進行相關的配置

configuration public class feignmultipartsupportconfig bean public feign.logger.level multipartloggerlevel 註記 1.接受檔案引數要用requestpart 2.configuration註解c...