解決Feign獲取異常信息的處理方案

Feign獲取異常信息

最近在使用Feign調用時,出現瞭異常,原本使用的是fallback,直接返回瞭自定義的結果

@Override
    public Result findUserNameById(String id) {
        return new Result(false, StatusCode.ERROR,"啊哦,用戶客戶端出現瞭異常");
    }

但是無法獲取具體的異常信息

解決方案

將fallback換成fallbackFactory

一、客戶端接口指定熔斷器處理工廠類

/**
 * @author 
 * @date 2019/9/2215:37
 */
@FeignClient(value = "weblog-article",fallbackFactory = ArticleFallBackFactory.class,configuration = FeignInterceptor.class)
public interface ArticleClient {
    /**
     * 根據文章id封裝搜索文章實體
     * @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("搜索微服務調用文章客戶端出錯:"+throwable.getMessage()==null?"":throwable.getMessage());
        throwable.printStackTrace();
        return new ArticleClientImpl() {
            @Override
            public Result packageArticle(String aid) {
                return new Result(false, StatusCode.ERROR,"搜索微服務調用文章客戶端出錯 method:packageArticle");
            }
        };
    }
}

有時候throwable的getMessage沒有捕獲到個別異常信息,幹脆就直接打印瞭堆棧信息

三、ArticleClientImpl

/**
 * @author yunshi
 * @date 2019/9/2215:41
 */
public interface ArticleClientImpl extends ArticleClient {
    
}

實操可用~

Feign中 fallback獲取400等異常信息及message

Spring cloud中當調用第三接口的時候,為防止超時一直等待,我們一般用斷路由的方式來進行超時返回,我一般用Spring Cloud Hystrix。在調用第三方的地方進行fallback進行聲明,然後重新fallback函數,配置超時時間,在超時時間內容沒有返回或者參數錯誤就進人到fallback裡面進行處理。具體的做法,網上一大堆,可自行百度。

然後第三方接口,在參數錯誤的時候,也是按400返回,尤其是json裡面的數據key對應的value的合法性。而我們出錯的時候想把第三參數的錯誤信息返回,這樣就能很明確知道哪錯瞭,而不是認為是超時,下面進入正題:

1.調用第三方的方法

fallbackFactory中調用自己重寫的fallback,熔斷時會自動調用。

2.fallback函數返回值的組合

自己重寫的熔斷函數中,重新create函數,其中throwable 會記錄捕獲的所有異常,我們通過getMessage可得到我們的信息,具體可以參考FallbackFactory接口的實現。

3.返回值

把fallback函數的返回值反倒返回值的msg中返回,這樣調用接口的時候就可以得到第三方返回的錯誤信息,進行調整瞭。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: