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

SpringCloud OpenFeign與Ribbon客戶端配置詳解

 更新時間:2022年11月23日 10:34:01   作者:卡布奇諾-海晨  
在springcloud中,openfeign是取代了feign作為負(fù)載均衡組件的,feign最早是netflix提供的,他是一個輕量級的支持RESTful的http服務(wù)調(diào)用框架,內(nèi)置了ribbon,而ribbon可以提供負(fù)載均衡機(jī)制,因此feign可以作為一個負(fù)載均衡的遠(yuǎn)程服務(wù)調(diào)用框架使用

一、前言

OpenFeign為微服務(wù)架構(gòu)下服務(wù)之間的調(diào)用提供了解決方案,OpenFeign是一種聲明式、模板化的HTTP客戶端。在Spring Cloud中使用OpenFeign,可以做到使用HTTP請求訪問遠(yuǎn)程服務(wù),就像調(diào)用本地方法一樣的,開發(fā)者完全感知不到這是在調(diào)用遠(yuǎn)程方法,更感知不到在訪問HTTP請求。但是如果請求連接超時、處理請求超時怎么辦,如果我們放任不管聽之任之勢必造成服務(wù)雪崩,客戶電話打爆投訴,背鍋的又會是誰呢?所以本篇文章我們來探究一下超時處理:

二、OpenFeign與Ribbon配置

這里的例子可以在本專欄里面找到,也可以自己手動試試。

1、OpenFeign默認(rèn)處理請求超時時間

1.1、模擬處理請求0.5秒

    @Override
    public String feign(String str) {
        try {
            // 模擬處理請求超時
            Thread.sleep(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "Hello " + str + ":";
    }

用postman請求看下feign調(diào)用結(jié)果:

可以看到正常執(zhí)行并返回了結(jié)果。 我們繼續(xù)看下面的一組實(shí)驗(yàn):

1.2、模擬處理請求1秒

    @Override
    public String feign(String str) {
        try {
            // 模擬處理請求超時熔斷
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "Hello " + str + ":";
    }

用postman請求看下feign調(diào)用結(jié)果:

響應(yīng)結(jié)果是“網(wǎng)絡(luò)繁忙,請稍后再試試?。?!” ,可見請求超時了會降級處理。所以O(shè)penFeign默認(rèn)處理請求操作超時時間為1秒。這個時間確實(shí)是快了點(diǎn)!

2、Ribbon配置

2.1、配置請求處理超時5秒

ribbon:
  eureka:
    enabled: false #由于使用Nacos,而不是Eureka
  eager-load:
    enabled: true #饑餓加載,系統(tǒng)啟動時創(chuàng)建好ribbon客戶端而不是在使用時去創(chuàng)建
  ConnectTimeout: 5000 #單位ms,請求連接超時時間 那這里1分鐘
  ReadTimeout: 5000 #單位ms,請求處理的超時時間
  OkToRetryOnAllOperations: false #對所有操作請求都進(jìn)行重試
  MaxAutoRetriesNextServer: 0 #切換實(shí)例的重試次數(shù)
  MaxAutoRetries: 0 #對當(dāng)前實(shí)例的重試次數(shù)
  ServerListRefreshInterval: 2000 #從源刷新服務(wù)器列表的間隔
  NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RetryRule

用postman請求看下feign調(diào)用結(jié)果:

可見Ribbon中配置的超時時間5秒相對于模擬睡眠時間1秒較長,睡眠時間過了處理完請求,返回正常結(jié)果。

2.2、模擬請求處理5秒

    @Override
    public String feign(String str) {
        try {
            // 模擬處理請求超時熔斷
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return "Hello " + str + ":";
    }

用postman請求看下feign調(diào)用結(jié)果:

響應(yīng)結(jié)果是“網(wǎng)絡(luò)繁忙,請稍后再試試?。?!” ,可見請求超時了會降級處理。所以處理請求操作不能時間不能超過Ribbon配置的處理請求超時時間,否則會被降級處理(自己定義降級處理)!

3、OpenFeign配置

3.1、配置請求處理超時6秒

用postman請求看下feign調(diào)用結(jié)果:feign:
  sentinel:
    enabled: true
    # 設(shè)置 feign 超時時間,優(yōu)先級高于ribbon配置
  client:
    config:
      # default 設(shè)置的全局超時時間,指定服務(wù)名稱可以設(shè)置單個服務(wù)的超時時間
      default:
        connectTimeout: 6000
        readTimeout: 6000

可見雖然Ribbon中配置的超時時間5秒,但是feign配置的處理請求超時時間為6秒,相對于模擬睡眠時間5秒大于ribbon配置時間小于feign配置時間并且處理完請求,返回正常結(jié)果。那么feign的配置覆蓋了ribbon配置的超時時間,feign的配置優(yōu)先級高于ribbon的。

3.2、OpenFeign配置對全部服務(wù)有效

feign:
  hystrix:
    # Feign啟用斷路器,默認(rèn)為FALSE
    enabled: true
  client:
    config:
      # 針對所有的服務(wù)
      default:
        # Feign的連接建立超時時間,默認(rèn)為10秒
        connectTimeout: 5000
        # Feign的請求處理超時時間,默認(rèn)為60秒
        readTimeout: 5000
        # 日志級別
        loggerLevel: full
        # 錯誤解碼器
        errorDecoder: com.example.SimpleErrorDecoder
        # 重試策略
        retryer: com.example.SimpleRetryer
        # 攔截器配置(和@Bean的方式二選一)
        requestInterceptors:
          - com.example.FooRequestInterceptor
          - com.example.BarRequestInterceptor
        # 是否對404錯誤碼解碼
        # 處理邏輯詳見feign.SynchronousMethodHandler#executeAndDecode
        decode404: false
        # 編碼器
        encoder: com.example.SimpleEncoder
        # 解碼器
        decoder: com.example.SimpleDecoder
        # 契約
        contract: com.example.SimpleContract

注意config下的default。

3.3、針對某個服務(wù)

feign:
  hystrix:
    # Feign啟用斷路器,默認(rèn)為FALSE
    enabled: true
  client:
    config:
      # 針對某個服務(wù)
      ceam-wx:
        # Feign的連接建立超時時間,默認(rèn)為10秒
        connectTimeout: 5000
        # Feign的請求處理超時時間,默認(rèn)為60秒
        readTimeout: 5000
        # 日志級別
        loggerLevel: full
        # 錯誤解碼器
        errorDecoder: com.example.SimpleErrorDecoder
        # 重試策略
        retryer: com.example.SimpleRetryer
        # 攔截器配置(和@Bean的方式二選一)
        requestInterceptors:
          - com.example.FooRequestInterceptor
          - com.example.BarRequestInterceptor
        # 是否對404錯誤碼解碼
        # 處理邏輯詳見feign.SynchronousMethodHandler#executeAndDecode
        decode404: false
        # 編碼器
        encoder: com.example.SimpleEncoder
        # 解碼器
        decoder: com.example.SimpleDecoder
        # 契約
        contract: com.example.SimpleContract

注意config下的ceam-wx(服務(wù)名)。

到此這篇關(guān)于SpringCloud OpenFeign與Ribbon客戶端配置詳解的文章就介紹到這了,更多相關(guān)SpringCloud OpenFeign與Ribbon內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

阿拉善盟| 姚安县| 诏安县| 理塘县| 临洮县| 天镇县| 郯城县| 石棉县| 马龙县| 左云县| 湖口县| 洮南市| 武宁县| 庐江县| 大石桥市| 电白县| 泸水县| 宜良县| 益阳市| 雷州市| 含山县| 乌兰浩特市| 沙河市| 景洪市| 探索| 剑河县| 岳阳市| 灌云县| 井陉县| 长武县| 临安市| 大石桥市| 巴林左旗| 台东县| 南康市| 姚安县| 锡林浩特市| 乐亭县| 厦门市| 贡嘎县| 屏南县|