最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

feign首次調(diào)用時(shí)初始化操作導(dǎo)致的超時(shí)問題及處理

 更新時(shí)間:2026年03月19日 08:52:36   作者:一定不晚睡啊  
這篇文章主要介紹了feign首次調(diào)用時(shí)初始化操作導(dǎo)致的超時(shí)問題及處理,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

feign等待的時(shí)間默認(rèn)情況下為1秒.如果1秒之內(nèi)沒有返回,那么此時(shí)會進(jìn)行重試(默認(rèn)情況下會重試一次)重試失敗后 會進(jìn)行降級邏輯處理,如果沒有提供降級邏輯就會報(bào)錯(cuò)

問題1

feign在進(jìn)行第一次遠(yuǎn)程調(diào)用時(shí)需要做很多的初始化操作(ribbon進(jìn)行初始化),就會導(dǎo)致第一次遠(yuǎn)程調(diào)用的時(shí)消耗的時(shí)間較長,有的時(shí)候可能會出現(xiàn)超時(shí),在我們業(yè)務(wù)系統(tǒng)中應(yīng)該盡量避免觸發(fā)超時(shí)!

解決方案1

對ribbon的初始化操作提前完成,不要在第一次調(diào)用的時(shí)候才進(jìn)行初始化

#開啟ribbon的饑餓加載
ribbon:
  eager-load:
    enabled: true
    clients: service-xxx服務(wù)模塊,可寫多個(gè)模塊

解決方案2

延長feign的超時(shí)時(shí)間

弊端:產(chǎn)生雪崩效應(yīng)的概率增大了

注意:顯示指定后如果還觸發(fā)超時(shí),那么feign是不會進(jìn)行重試

  • feign的超時(shí)配置方式 1(顯式的指定超時(shí)時(shí)間):
feign:
#feign集成sentinel服務(wù)保護(hù)(斷路器,防止雪崩)
  sentinel:
    enabled: true
  client:
    config:
   #feign延長超時(shí)時(shí)間
      default: #表示應(yīng)用到所有服務(wù)提供方(也可以指定服務(wù)名稱)
        connectTimeout: 4000
        readTimeout: 4000

feign的超時(shí)配置方式 2(精準(zhǔn)設(shè)置接口超時(shí)配置):弊端:有時(shí)候需要每個(gè)接口都配置

2.1為feign接口添加Request.Options options參數(shù)

@GetMapping(value="/api/xx")
public abstract Resulttest(Request.Optionsoptions) ;

2.2遠(yuǎn)程調(diào)用時(shí)候傳遞Request.Options參數(shù),直接new出來就行

Request.Optionsoptions=newRequest.Options(3, TimeUnit.MILLISECONDS, 3, TimeUnit.MILLISECONDS, true);
//參數(shù)說明:
connectTimeout:連接超時(shí)時(shí)間\時(shí)間單位
readTimeout :讀取數(shù)據(jù)超時(shí)時(shí)間\時(shí)間單位
followRedirects :是否允許重定向

伴隨問題:如果顯示指定后如果還觸發(fā)超時(shí),那么feign是不會進(jìn)行重試但是對于特殊業(yè)務(wù)場景需要進(jìn)行重試時(shí)

解決方案:自定義重試器

重試原理:執(zhí)行業(yè)務(wù)方法的時(shí)候報(bào)錯(cuò)了,那么此時(shí)就需要調(diào)用重試器中的continueOrPropagate方法。如果該方法產(chǎn)生了異常,那么重試結(jié)束;如果

該方法沒有產(chǎn)生異常那么則進(jìn)行重試。

如果我們想在自定義超時(shí)時(shí)間的同時(shí)使用重試機(jī)制,那么此時(shí)就需要自定義重試器。

  • 步鄹1:自定義一個(gè)類實(shí)現(xiàn)Retryer重寫方法
public class MyRetryer implements Retryer {
    
    private intstart=1 ;
    private intend=3 ;  //規(guī)定重試次數(shù)
?
?
    /**
     * 遠(yuǎn)程調(diào)用失敗以后,會調(diào)用重試器的這個(gè)方法
     */
    @Override//判斷是否需要重試
    public void continueOrPropagate(RetryableExceptione) {
        
        if(start>end) {
            throwe ;
        }
        start++ ;
        System.out.println("MyRetryer...continueOrPropagate....");
    }
?
    @Override//返回對象
    public Retryer clone() {
        return new MyRetryer();
    }
    
}

步鄹2:將自定義的重試器配置給feign

feign:
#feign集成sentinel服務(wù)保護(hù)(斷路器,防止雪崩)
  sentinel:
    enabled: true
  client:
    config:
   #feign延長超時(shí)時(shí)間
      default: #表示應(yīng)用到所有服務(wù)提供方(也可以指定服務(wù)名稱)
       # connectTimeout: 4000
       # readTimeout: 4000       
        retryer: com.aa.bb.MyRetryer #配置重試器,全類名

可以將配置抽取到nacos中心,哪里需要哪里添加

  #feign集成sentinel服務(wù)保護(hù)(斷路器,防止雪崩)
feign:
  sentinel:
    enabled: true
  client:
    config:
   #feign延長超時(shí)時(shí)間
      default:
        connectTimeout: 1500
        readTimeout: 1500
        retryer: com.xx.feign.retry.FeignClientRetryer

#配置ribbon的饑餓加載
ribbon:
  eager-load:
    enabled: true
    clients: 微服務(wù),微服務(wù)2,微服務(wù)3

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java虛擬機(jī)內(nèi)存結(jié)構(gòu)及編碼實(shí)戰(zhàn)分享

    Java虛擬機(jī)內(nèi)存結(jié)構(gòu)及編碼實(shí)戰(zhàn)分享

    這篇文章主要介紹了Java虛擬機(jī)內(nèi)存結(jié)構(gòu)及編碼實(shí)戰(zhàn)分享,文章圍繞詳細(xì)主題展開相關(guān)資料具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • Java中instanceof 關(guān)鍵字的使用

    Java中instanceof 關(guān)鍵字的使用

    instanceof通過返回一個(gè)布爾值來指出,某個(gè)對象是否是某個(gè)特定類或者是該特定類的子類的一個(gè)實(shí)例,本文就來詳細(xì)的介紹一下instanceof 關(guān)鍵字的使用,感興趣的可以了解一下
    2023-10-10
  • Java中高效的判斷數(shù)組中某個(gè)元素是否存在詳解

    Java中高效的判斷數(shù)組中某個(gè)元素是否存在詳解

    相信大家在操作Java的時(shí)候,經(jīng)常會要檢查一個(gè)數(shù)組(無序)是否包含一個(gè)特定的值?這是一個(gè)在Java中經(jīng)常用到的并且非常有用的操作。同時(shí),這個(gè)問題在Stack Overflow中也是一個(gè)非常熱門的問題。本文將分析幾種常見用法及其時(shí)間成本,有需要的朋友們可以參考借鑒。
    2016-11-11
  • Java常用時(shí)間工具類總結(jié)(珍藏版)

    Java常用時(shí)間工具類總結(jié)(珍藏版)

    這篇文章主要為大家詳細(xì)介紹了Java中一些常用時(shí)間工具類的使用示例代碼,文中的代碼簡潔易懂,對我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-07-07
  • Java源碼解析之ClassLoader

    Java源碼解析之ClassLoader

    在看系統(tǒng)啟動的流程中看到了ClassLoader使用,重新溫故下ClassLoader流程和原理,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • 淺談DetachedCriteria和Criteria的使用方法(必看)

    淺談DetachedCriteria和Criteria的使用方法(必看)

    下面小編就為大家?guī)硪黄獪\談DetachedCriteria和Criteria的使用方法(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • IDEA如何快速構(gòu)建UML類圖

    IDEA如何快速構(gòu)建UML類圖

    UML類圖是一種用于描述軟件系統(tǒng)靜態(tài)結(jié)構(gòu)的可視化建模語言,它通過類、屬性、方法以及它們之間的關(guān)系來表示系統(tǒng),類圖主要用于面向?qū)ο笤O(shè)計(jì),幫助理解系統(tǒng)的結(jié)構(gòu)和類之間的關(guān)系,IDEA提供了自動生成UML類圖的功能,但其局限性在于只能基于現(xiàn)有代碼生成
    2025-02-02
  • Java設(shè)計(jì)模式UML之類圖精解

    Java設(shè)計(jì)模式UML之類圖精解

    在UML類圖中,類使用包含類名、屬性(field) 和方法(method) 且?guī)в蟹指罹€的矩形來表示,比如下圖表示一個(gè)Employee類,它包含name,age和email這3個(gè)屬性,以及modifyInfo()方法
    2022-02-02
  • SpringBoot統(tǒng)一返回格式的方法詳解

    SpringBoot統(tǒng)一返回格式的方法詳解

    今天小編主要是和大家分享一個(gè)讓代碼變得更簡潔的小技巧:統(tǒng)一返回格式,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-08-08
  • Java進(jìn)階之Object類及常用方法詳解

    Java進(jìn)階之Object類及常用方法詳解

    Object?類是?Java?默認(rèn)提供的一個(gè)類,是所有?Java?類的祖先類,每個(gè)類都使用?Object?作為父類。本文就來和大家聊聊Object類的常用方法,希望對大家有所幫助
    2023-01-01

最新評論

宁南县| 临邑县| 白玉县| 繁昌县| 芦山县| 祁连县| 团风县| 绵竹市| 交口县| 建阳市| 西华县| 普宁市| 花莲县| 寿阳县| 方正县| 吴桥县| 东乡族自治县| 肇州县| 徐州市| 伊金霍洛旗| 邛崃市| 武汉市| 晋宁县| 中阳县| 新宁县| 龙州县| 勐海县| 祁阳县| 梓潼县| 都江堰市| 松阳县| 太湖县| 太康县| 延庆县| 乌鲁木齐县| 南江县| 乌恰县| 察哈| 铜梁县| 崇仁县| 全椒县|