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

Feign的原理及概念詳解

 更新時(shí)間:2025年11月06日 09:16:09   作者:CocoaAndYy  
文章介紹了Feign,一個(gè)聲明式、模板化的HTTP客戶端,以及其在Spring Cloud中的增強(qiáng),Feign通過(guò)代理類簡(jiǎn)化HTTP請(qǐng)求的調(diào)用,并提供了詳細(xì)的調(diào)用流程、優(yōu)化配置和架構(gòu)說(shuō)明,幫助開(kāi)發(fā)者更方便地進(jìn)行服務(wù)調(diào)用和管理

1.什么是Feign

Feign是Netflix開(kāi)發(fā)的聲明式、模板化的HTTP客戶端,F(xiàn)eign可幫助我們更加便捷、優(yōu)雅地調(diào)用HTTP API。Feign可以做到使用HTTP請(qǐng)求遠(yuǎn)程服務(wù)時(shí)就像調(diào)用本地方法一樣的體驗(yàn),開(kāi)發(fā)者完全感知不到這是遠(yuǎn)程方法,更感知不到這是個(gè)HTTP請(qǐng)求。

Spring Cloud OpenFeign對(duì)Feign進(jìn)行了增強(qiáng),使其支持Spring MVC注解,從而使得Feign的使用更加方便。

官方文檔: Spring Cloud OpenFeign

2.Feign的調(diào)用流程(核心)

3.Feign原理

1.將feign接口的代理類掃描到Spring容器中

@EnableFeignClients開(kāi)啟feign注解掃描:FeignClientsRegistrar.registerFeignClients()掃描被 @FeignClient標(biāo)識(shí)的接口生成代理類,并把接口和代理類交給Spring的容器管理。

2.為接口的方法創(chuàng)建RequestTemplate

當(dāng)consumer調(diào)用feign代理類時(shí),代理類會(huì)調(diào)用SynchronousMethodHandler.invoke()創(chuàng)建RequestTemplate(url,參數(shù))

3.發(fā)出請(qǐng)求

代理類會(huì)通過(guò)RequestTemplate創(chuàng)建Request,然后client(URLConnect、HttpClient、OkHttp)使用Request發(fā)送請(qǐng)求

4.Feign優(yōu)化

4.1日志配置

  • NONE【性能最佳,默認(rèn)值】:不記錄任何日志。
  • BASIC【適用于生產(chǎn)環(huán)境追蹤問(wèn)題】:僅記錄請(qǐng)求方法、URL、響應(yīng)狀態(tài)代碼以及執(zhí)行時(shí)間。
  • HEADERS:記錄BASIC級(jí)別的基礎(chǔ)上,記錄請(qǐng)求和響應(yīng)的header。
  • FULL【比較適用于開(kāi)發(fā)及測(cè)試環(huán)境定位問(wèn)題】:記錄請(qǐng)求和響應(yīng)的header、body和元數(shù)據(jù)。

配置方式

(1)定義一個(gè)配置類,指定日志級(jí)別

// 注意: 此處配置@Configuration注解就會(huì)全局生效,如果想指定對(duì)應(yīng)微服務(wù)生效,就不能配置@Configuration
@Configuration
public class FeignConfig {
   /**
   * 日志級(jí)別
   */
   @Bean
   public Logger.Level feignLoggerLevel() {
     return Logger.Level.FULL;
   }
}

(2) 在application.yml配置文件中配置 Client 的日志級(jí)別才能正常輸出日志,格式是"logging.level.feign接口包路徑=debug"

logging: 
  level: 
    com.tuling.mall.feigndemo.feign: debug

4.2超時(shí)時(shí)間配置

OpenFeign使用兩個(gè)超時(shí)參數(shù):

  • connectTimeout:可以防止由于較長(zhǎng)的服務(wù)器處理時(shí)間而阻塞調(diào)用者。
  • readTimeout:從連接建立時(shí)開(kāi)始應(yīng)用,當(dāng)返回響應(yīng)花費(fèi)太長(zhǎng)時(shí)間時(shí)觸發(fā)。

補(bǔ)充說(shuō)明: Feign的底層用的是Ribbon或者LoadBalancer,但超時(shí)時(shí)間以Feign配置為準(zhǔn)

4.3契約配置(了解即可)

Spring Cloud 在 Feign 的基礎(chǔ)上做了擴(kuò)展,可以讓 Feign 支持 Spring MVC 的注解來(lái)調(diào)用。

原生的 Feign 是不支持 Spring MVC 注解的,如果你想在 Spring Cloud 中使用原生的注解方式來(lái)定義客戶端也是可以的,通過(guò)配置契約來(lái)改變這個(gè)配置,Spring Cloud 中默認(rèn)的是SpringMvcContract。

4.4客戶端組件配置

我們知道HTTP連接需要經(jīng)過(guò)三次握手,四次揮手的過(guò)程,這是很耗費(fèi)性能的;所以HTTP連接池幫助我們節(jié)省了這一步。

同時(shí)Feign的HTTP客戶端支持三種框架:

HttpURLConnection、HttpClient、OkHttp;默認(rèn)是HttpURLConnection。

Feign 中默認(rèn)使用 JDK 原生的 URLConnection 發(fā)送 HTTP 請(qǐng)求,沒(méi)有連接池,我們可以集成別的組件來(lái)替換掉 URLConnection,比如 Apache HttpClient5,OkHttp。

Feign發(fā)起調(diào)用真正執(zhí)行邏輯:feign.Client#execute (擴(kuò)展點(diǎn))

4.5GZIP 壓縮配置

開(kāi)啟壓縮可以有效節(jié)約網(wǎng)絡(luò)資源,提升接口性能,我們可以配置 GZIP 來(lái)壓縮數(shù)據(jù)。

4.6編碼器解碼器配置

Feign 中提供了自定義的編碼解碼器設(shè)置,同時(shí)也提供了多種編碼器的實(shí)現(xiàn),比如 Gson、Jaxb、Jackson。

我們可以用不同的編碼解碼器來(lái)處理數(shù)據(jù)的傳輸。

如果你想傳輸 XML 格式的數(shù)據(jù),可以自定義 XML 編碼解碼器來(lái)實(shí)現(xiàn),或者使用官方提供的 Jaxb。

4.7攔截器配置

通過(guò)攔截器實(shí)現(xiàn)參數(shù)傳遞。

擴(kuò)展點(diǎn): feign.RequestInterceptor

使用場(chǎng)景:

(1)傳遞分布式事務(wù)ID,標(biāo)明哪個(gè)微服務(wù)屬于同一事物

(2)token校驗(yàn)的參數(shù)傳遞(實(shí)現(xiàn)認(rèn)證邏輯)

5.Feign整體架構(gòu)(RPC架構(gòu))

總結(jié)

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

相關(guān)文章

  • Java枚舉之EnumSet詳解

    Java枚舉之EnumSet詳解

    這篇文章主要介紹了Java枚舉之EnumSet詳解,使用時(shí)進(jìn)行與或運(yùn)算,但是定義多了之后,會(huì)很亂、臃腫,編寫容易出錯(cuò),EnumSet可以實(shí)現(xiàn)類似的功能,且使用起來(lái)很簡(jiǎn)潔,需要的朋友可以參考下
    2023-12-12
  • Java使用Random類生成隨機(jī)數(shù)示例

    Java使用Random類生成隨機(jī)數(shù)示例

    這篇文章主要介紹了Java使用Random類生成隨機(jī)數(shù),結(jié)合實(shí)例形式分析了java基于Random類生成隨機(jī)數(shù)與遍歷輸出相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • java后臺(tái)接收app上傳的圖片的示例代碼

    java后臺(tái)接收app上傳的圖片的示例代碼

    本篇文章主要介紹了java后臺(tái)接受app上傳的圖片的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • JCrontab簡(jiǎn)單入門實(shí)例詳解

    JCrontab簡(jiǎn)單入門實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了JCrontab簡(jiǎn)單入門實(shí)例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • SpringBoot Feign使用教程超全面講解

    SpringBoot Feign使用教程超全面講解

    現(xiàn)在的微服務(wù)項(xiàng)目不少都使用的是springboot+Feign構(gòu)建的項(xiàng)目,微服務(wù)之間的調(diào)用都離不開(kāi)feign來(lái)進(jìn)行遠(yuǎn)程調(diào)用,這篇文章主要介紹了SpringBoot Feign使用教程,需要的朋友可以參考下
    2022-11-11
  • 解決JavaMail附件名字過(guò)長(zhǎng)導(dǎo)致的亂碼問(wèn)題

    解決JavaMail附件名字過(guò)長(zhǎng)導(dǎo)致的亂碼問(wèn)題

    這篇文章主要介紹了解決JavaMail附件名字過(guò)長(zhǎng)導(dǎo)致的亂碼問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-10-10
  • Java遞歸實(shí)現(xiàn)字符串全排列與全組合

    Java遞歸實(shí)現(xiàn)字符串全排列與全組合

    這篇文章主要為大家詳細(xì)介紹了Java遞歸實(shí)現(xiàn)字符串全排列與全組合,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Maven中dependency和plugins的繼承與約束

    Maven中dependency和plugins的繼承與約束

    這篇文章主要介紹了Maven中dependency和plugins的繼承與約束,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Java如何獲取字符串單詞個(gè)數(shù)

    Java如何獲取字符串單詞個(gè)數(shù)

    這篇文章主要介紹了Java如何獲取字符串單詞個(gè)數(shù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java8新特性stream和parallelStream區(qū)別

    Java8新特性stream和parallelStream區(qū)別

    這篇文章主要介紹了Java8新特性stream和parallelStream區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論