欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ù)載均衡機制,因此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ù)看下面的一組實驗:

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秒。這個時間確實是快了點!

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ù)
  MaxAutoRetries: 0 #對當(dāng)前實例的重試次數(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ò)繁忙,請稍后再試試?。。?rdquo; ,可見請求超時了會降級處理。所以處理請求操作不能時間不能超過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)文章

  • SpringBoot集成EasyExcel的步驟

    SpringBoot集成EasyExcel的步驟

    EasyExcel是阿里巴巴開源poi插件之一,主要解決了poi框架使用復(fù)雜,sax解析模式不容易操作,數(shù)據(jù)量大起來容易OOM,解決了POI并發(fā)造成的報錯。主要解決方式:通過解壓文件的方式加載,一行一行的加載,并且拋棄樣式字體等不重要的數(shù)據(jù),降低內(nèi)存的占用。
    2021-06-06
  • 詳解Java的內(nèi)存模型

    詳解Java的內(nèi)存模型

    本文更準(zhǔn)確的說法應(yīng)該是JVM的內(nèi)存模型,但是這里又牽扯了一些其他的前置知識,主要是想從Java入手,從源頭上梳理一遍整個Java底層運行的機制,中間會額外補充一些和題目無關(guān)的前置基礎(chǔ),導(dǎo)致主講內(nèi)存模型的篇幅所占的比例就不是那么絕對。
    2021-06-06
  • SpringBoot關(guān)于List集合的校驗方式

    SpringBoot關(guān)于List集合的校驗方式

    這篇文章主要介紹了SpringBoot關(guān)于List集合的校驗方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • java定義二維數(shù)組的幾種寫法(小結(jié))

    java定義二維數(shù)組的幾種寫法(小結(jié))

    下面小編就為大家?guī)硪黄猨ava定義二維數(shù)組的幾種寫法(小結(jié))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-10-10
  • Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)

    Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)

    這篇文章主要介紹了Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 詳解如何使用ModelMapper庫進(jìn)行對象之間的屬性映射

    詳解如何使用ModelMapper庫進(jìn)行對象之間的屬性映射

    這篇文章主要介紹了如何使用ModelMapper庫進(jìn)行對象之間的屬性映射實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Java?@Accessors注解圖文詳解

    Java?@Accessors注解圖文詳解

    @Accessors用于改變@Data生成的getter和setter方法的生成結(jié)果,下面這篇文章主要給大家介紹了關(guān)于Java?@Accessors注解的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • springboot多文件上傳代碼實例及解析

    springboot多文件上傳代碼實例及解析

    這篇文章主要介紹了springboot多文件上傳代碼實例及解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • java 類加載機制和反射詳解及實例代碼

    java 類加載機制和反射詳解及實例代碼

    這篇文章主要介紹了java 類加載機制和反射詳解及實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • Java 8新時間日期庫java.time的使用示例

    Java 8新時間日期庫java.time的使用示例

    這篇文章主要給你大家介紹了關(guān)于Java 8新時間日期庫java.time的使用示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論