解決Feign獲取異常信息的處理方案
Feign獲取異常信息
最近在使用Feign調(diào)用時(shí),出現(xiàn)了異常,原本使用的是fallback,直接返回了自定義的結(jié)果
@Override public Result findUserNameById(String id) { return new Result(false, StatusCode.ERROR,"啊哦,用戶客戶端出現(xiàn)了異常"); }
但是無(wú)法獲取具體的異常信息
解決方案
將fallback換成fallbackFactory
一、客戶端接口指定熔斷器處理工廠類
/** * @author * @date 2019/9/2215:37 */ @FeignClient(value = "weblog-article",fallbackFactory = ArticleFallBackFactory.class,configuration = FeignInterceptor.class) public interface ArticleClient { /** * 根據(jù)文章id封裝搜索文章實(shí)體 * @param aid * @return */ @GetMapping("article/client/packageArticle/{aid}") Result packageArticle(@PathVariable("aid") String aid); }
二、ArticleFallBackFactory
/** * @author yunshi * @date 2019/10/2010:37 */ @Component public class ArticleFallBackFactory implements FallbackFactory<ArticleClient> { @Override public ArticleClient create(Throwable throwable) { System.out.println("搜索微服務(wù)調(diào)用文章客戶端出錯(cuò):"+throwable.getMessage()==null?"":throwable.getMessage()); throwable.printStackTrace(); return new ArticleClientImpl() { @Override public Result packageArticle(String aid) { return new Result(false, StatusCode.ERROR,"搜索微服務(wù)調(diào)用文章客戶端出錯(cuò) method:packageArticle"); } }; } }
有時(shí)候throwable的getMessage沒有捕獲到個(gè)別異常信息,干脆就直接打印了堆棧信息
三、ArticleClientImpl
/** * @author yunshi * @date 2019/9/2215:41 */ public interface ArticleClientImpl extends ArticleClient { }
實(shí)操可用~
Feign中 fallback獲取400等異常信息及message
Spring cloud中當(dāng)調(diào)用第三接口的時(shí)候,為防止超時(shí)一直等待,我們一般用斷路由的方式來(lái)進(jìn)行超時(shí)返回,我一般用Spring Cloud Hystrix。在調(diào)用第三方的地方進(jìn)行fallback進(jìn)行聲明,然后重新fallback函數(shù),配置超時(shí)時(shí)間,在超時(shí)時(shí)間內(nèi)容沒有返回或者參數(shù)錯(cuò)誤就進(jìn)人到fallback里面進(jìn)行處理。具體的做法,網(wǎng)上一大堆,可自行百度。
然后第三方接口,在參數(shù)錯(cuò)誤的時(shí)候,也是按400返回,尤其是json里面的數(shù)據(jù)key對(duì)應(yīng)的value的合法性。而我們出錯(cuò)的時(shí)候想把第三參數(shù)的錯(cuò)誤信息返回,這樣就能很明確知道哪錯(cuò)了,而不是認(rèn)為是超時(shí),下面進(jìn)入正題:
1.調(diào)用第三方的方法
fallbackFactory中調(diào)用自己重寫的fallback,熔斷時(shí)會(huì)自動(dòng)調(diào)用。
2.fallback函數(shù)返回值的組合
自己重寫的熔斷函數(shù)中,重新create函數(shù),其中throwable 會(huì)記錄捕獲的所有異常,我們通過(guò)getMessage可得到我們的信息,具體可以參考FallbackFactory接口的實(shí)現(xiàn)。
3.返回值
把fallback函數(shù)的返回值反倒返回值的msg中返回,這樣調(diào)用接口的時(shí)候就可以得到第三方返回的錯(cuò)誤信息,進(jìn)行調(diào)整了。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)Flappy Bird游戲源碼
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)Flappy Bird游戲源碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-12-12java面試題解LeetCode27二叉樹的鏡像實(shí)例
這篇文章主要為大家介紹了java面試題解LeetCode27二叉樹的鏡像實(shí)例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01Spring?Cloud中Sentinel的兩種限流模式介紹
如何使用Sentinel做流量控制呢?這篇文章就來(lái)為大家詳細(xì)介紹了Spring?Cloud中Sentinel的兩種限流模式,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-05-05Java 無(wú)符號(hào)右移與右移運(yùn)算符的使用介紹
這篇文章主要介紹了Java 無(wú)符號(hào)右移與右移運(yùn)算符的使用介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06JDK 7U15在 Windows x86平臺(tái)下的安裝方法
本文給大家分享的是如何在windows平臺(tái)下安裝JDK最新版的方法,十分的簡(jiǎn)單全面,有需要的小伙伴可以參考下2016-05-05Java上傳文件錯(cuò)誤java.lang.NoSuchMethodException的解決辦法
今天小編就為大家分享一篇關(guān)于Java上傳文件錯(cuò)誤java.lang.NoSuchMethodException的解決辦法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-01-01高并發(fā)下如何避免重復(fù)數(shù)據(jù)產(chǎn)生技巧
這篇文章主要為大家介紹了高并發(fā)下如何避免重復(fù)數(shù)據(jù)的產(chǎn)生技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07Java Web實(shí)現(xiàn)添加定時(shí)任務(wù)的方法示例
這篇文章主要介紹了Java Web實(shí)現(xiàn)添加定時(shí)任務(wù)的方法,涉及java web定時(shí)任務(wù)控制類定義、調(diào)用及監(jiān)聽器定義、添加等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01