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

Feign的原理及概念詳解

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

1.什么是Feign

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

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

官方文檔: Spring Cloud OpenFeign

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

3.Feign原理

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

@EnableFeignClients開啟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ā)出請求

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

4.Feign優(yōu)化

4.1日志配置

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

配置方式

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

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

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

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

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

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

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

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

4.3契約配置(了解即可)

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

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

4.4客戶端組件配置

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

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

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

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

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

4.5GZIP 壓縮配置

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

4.6編碼器解碼器配置

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

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

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

4.7攔截器配置

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

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

使用場景:

(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面試常見模式問題---代理模式

    java面試常見模式問題---代理模式

    代理模式是常用的java設(shè)計(jì)模式,他的特征是代理類與委托類有同樣的接口,代理類主要負(fù)責(zé)為委托類預(yù)處理消息、過濾消息、把消息轉(zhuǎn)發(fā)給委托類,以及事后處理消息
    2021-06-06
  • 深入詳解SpringBoot配置diff的實(shí)戰(zhàn)方法

    深入詳解SpringBoot配置diff的實(shí)戰(zhàn)方法

    在日常的開發(fā)與運(yùn)維工作中,配置管理是一項(xiàng)至關(guān)重要的任務(wù),簡單來說,Spring Boot 配置 diff 就是對比 Spring Boot 應(yīng)用中不同配置版本之間的差異,下面小編就和大家詳細(xì)介紹一下Spring Boot 配置 diff 的實(shí)戰(zhàn)方法吧
    2026-04-04
  • nacos gateway動(dòng)態(tài)路由實(shí)戰(zhàn)

    nacos gateway動(dòng)態(tài)路由實(shí)戰(zhàn)

    這篇文章主要介紹了nacos gateway動(dòng)態(tài)路由實(shí)戰(zhàn),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java 實(shí)戰(zhàn)范例之精美網(wǎng)上音樂平臺(tái)的實(shí)現(xiàn)

    Java 實(shí)戰(zhàn)范例之精美網(wǎng)上音樂平臺(tái)的實(shí)現(xiàn)

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+vue+Springboot+ssm+mysql+maven+redis實(shí)現(xiàn)一個(gè)前后端分離的精美網(wǎng)上音樂平臺(tái),大家可以在過程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • 遞歸出現(xiàn)棧溢出stackoverflow的問題及解決

    遞歸出現(xiàn)棧溢出stackoverflow的問題及解決

    這篇文章主要介紹了關(guān)于遞歸出現(xiàn)棧溢出stackoverflow的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • SpringBoot WebService服務(wù)端&客戶端使用案例教程

    SpringBoot WebService服務(wù)端&客戶端使用案例教程

    這篇文章主要介紹了SpringBoot WebService服務(wù)端&客戶端使用案例教程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-10-10
  • 解決springboot application.properties server.port配置問題

    解決springboot application.properties server.port配置問題

    這篇文章主要介紹了解決springboot application.properties server.port配置問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Spring boot項(xiàng)目使用thymeleaf模板過程詳解

    Spring boot項(xiàng)目使用thymeleaf模板過程詳解

    這篇文章主要介紹了Spring boot項(xiàng)目使用thymeleaf模板過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Spring Cloud 系列之負(fù)載均衡 Ribbon的示例代碼

    Spring Cloud 系列之負(fù)載均衡 Ribbon的示例代碼

    Ribbon 是 Netflix 發(fā)布的負(fù)載均衡器,它有助于控制 HTTP 和 TCP 客戶端的行為。這篇文章主要介紹了Spring Cloud 系列之負(fù)載均衡 Ribbon的示例代碼,需要的朋友可以參考下
    2020-11-11
  • Spring AOP 自定義注解的實(shí)現(xiàn)代碼

    Spring AOP 自定義注解的實(shí)現(xiàn)代碼

    本篇文章主要介紹了Spring AOP 自定義注解的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04

最新評論

林甸县| 桃园县| 福安市| 通许县| 寻甸| 清涧县| 成安县| 马尔康县| 四平市| 昌黎县| 左贡县| 三明市| 叙永县| 辽宁省| 图们市| 山东省| 衡山县| 越西县| 都江堰市| 关岭| 宁国市| 龙泉市| 巴彦淖尔市| 万载县| 徐汇区| 黎城县| 松潘县| 玉山县| 叶城县| 称多县| 高陵县| 安岳县| 灌南县| 乐业县| 临桂县| 平阴县| 博客| 内黄县| 汪清县| 永安市| 锦屏县|