溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Feign調(diào)用時(shí)出現(xiàn)了異常但無(wú)法獲取異常信息的問(wèn)題怎么解決

發(fā)布時(shí)間:2021-08-27 17:13:01 來(lái)源:億速云 閱讀:1443 作者:chen 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“Feign調(diào)用時(shí)出現(xiàn)了異常但無(wú)法獲取異常信息的問(wèn)題怎么解決”,在日常操作中,相信很多人在Feign調(diào)用時(shí)出現(xiàn)了異常但無(wú)法獲取異常信息的問(wèn)題怎么解決問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Feign調(diào)用時(shí)出現(xiàn)了異常但無(wú)法獲取異常信息的問(wèn)題怎么解決”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

目錄
  • Feign獲取異常信息

    • 解決方案

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

      • 二、ArticleFallBackFactory

      • 三、ArticleClientImpl

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

    • 1.調(diào)用第三方的方法

      • 2.fallback函數(shù)返回值的組合

        • 3.返回值

        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沒(méi)有捕獲到個(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)容沒(mé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)用。

        Feign調(diào)用時(shí)出現(xiàn)了異常但無(wú)法獲取異常信息的問(wèn)題怎么解決

        2.fallback函數(shù)返回值的組合

        自己重寫的熔斷函數(shù)中,重新create函數(shù),其中throwable 會(huì)記錄捕獲的所有異常,我們通過(guò)getMessage可得到我們的信息,具體可以參考FallbackFactory接口的實(shí)現(xiàn)。

        Feign調(diào)用時(shí)出現(xiàn)了異常但無(wú)法獲取異常信息的問(wèn)題怎么解決

        3.返回值

        把fallback函數(shù)的返回值反倒返回值的msg中返回,這樣調(diào)用接口的時(shí)候就可以得到第三方返回的錯(cuò)誤信息,進(jìn)行調(diào)整了。

        Feign調(diào)用時(shí)出現(xiàn)了異常但無(wú)法獲取異常信息的問(wèn)題怎么解決

        到此,關(guān)于“Feign調(diào)用時(shí)出現(xiàn)了異常但無(wú)法獲取異常信息的問(wèn)題怎么解決”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

        向AI問(wèn)一下細(xì)節(jié)

        免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

        AI