前言
十載的延川網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都營銷網站建設的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整延川建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。成都創新互聯從事“延川網站設計”,“延川網站推廣”以來,每個客戶項目都認真落實執行。
在使用feign進行遠程方法調用時,如果遠程服務端方法出現異常,客戶端有時需要捕獲,并且把異常信息返回給前端,而如果在開啟熔斷之后,這個異常會被消化,所以說,如果希望拿到服務端異常,feign.hystrix.enable需要設置為false,而當不開熔斷時,我們也有幾種方法把拿到服務端的異常信息,下面總結一下。
try...catch方法
這個方法比較直觀,也最好理解,但業務層會有很多try...catch這種代碼,所以不是很推薦。
注意:雖然服務端方法返回為ResponseEntity,但出現4xx,5xx這些異常時,還是會拋出一個FeignException的異常,而這對于服務來說,向前端拋出的還是5xx的服務端異常,這不是我們希望看到的。
try { ResponseEntity<?> body = productClient.add(name); if (body.getStatusCode().equals(HttpStatus.OK)) { return "test"; } else { return body.getBody().toString(); } } catch (FeignException ex) { return ex.getMessage(); }
feign異常攔截器
我們比較推薦使用這個方法,注冊一個bean對象,當feign調用出現異常時,會觸發這個方法,然后我們再統一處理這個異常,向下流繼續拋出加工后的錯誤信息。
/** * feign異常攔截器,當從feign拋出異常時走這個對象. */ @Configuration @Slf4j public class FeignClientErrorDecoder implements ErrorDecoder { @Override public Exception decode(String methodKey, Response response) { logger.info("feign client response:", response); String body = null; try { body = Util.toString(response.body().asReader()); } catch (IOException e) { logger.error("feign.IOException", e); } if (response.status() >= 400 && response.status() <= 500) { throw Exceptions.badRequestParams(body); } return errorStatus(methodKey, response); } }
注意,使用這個方式,需要在熔斷器關閉時才起作用,因為它們的執行過程是,先走這個攔截器,再走熔斷的fallback,所以這個異常會被熔斷吞掉,返回狀態為200,返回值為你的fallback的默認值。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對創新互聯的支持。
網站題目:feign服務端發現異常客戶端處理的方法介紹
標題網址:http://m.kartarina.com/article30/pipiso.html
成都網站建設公司_創新互聯,為您提供網站收錄、虛擬主機、搜索引擎優化、靜態網站、網頁設計公司、電子商務
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯