国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot 使用 Feign 無廢話 All-in-one 指南

這篇具有很好參考價值的文章主要介紹了SpringBoot 使用 Feign 無廢話 All-in-one 指南。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

開篇

Feign 是聲明式、模板化的 HTTP 客戶端, 可以幫助我們更快捷、優(yōu)雅地調用 HTTP API;Spring Cloud 為 Feign 添加了 Spring MVC 的注解支持,并整合了 Ribbon 和 Eureka 來為使用 Feign 時提供負載均衡;在 Spring Cloud 中使用 Feign 是非常容易的。

本篇主要介紹 SpringBoot 中要玩轉 Feign 需要掌握的如添加 pom 依賴、客戶端注解啟用、切換底層 HttpClient、配置數據壓縮、調整日志級別、定制配置、配置的優(yōu)先級機制、增加攔截器以及攔截器的追加機制等知識。

一、使用 Feign 的示例

1.1 添加依賴

<dependencies>
??<!--openfein的依賴-->
??<dependency>
??????<groupId>org.springframework.cloud</groupId>
??????<artifactId>spring-cloud-starter-openfeign</artifactId>
??????<version>2.1.3.RELEASE</version>
??</dependency>
</dependencies>
復制代碼

1.2 啟用 Feign

在 SpringBoot 的啟用類上添加注解@EnableFeignClients,@EnableFeignClients用于開啟 Feign,會自動掃描@FeignClient標注的 FeignClient 接口。

@SpringBootApplication
@EnableFeignClients
@EnableWeb
public?class?FeignApplication?{
????public?static?void?main(String[]?args)?{
????????SpringApplication.run(FeignApplication.class,args);
????}
}
復制代碼

1.3 編寫 FeignClient 接口

@FeignClient(
????????name?=?"demo-service",
????????url?=?"http://localhost:8080/feign/server/",
????????configuration?=?FeignInterceptor.class,
????????fallback?=?TestService.DefaultFallback.class
)
public?interface?TestService?{

????@RequestMapping(value?=?"/getError/{id}",?method?=?RequestMethod.GET)
????public?String?getError(@RequestParam("id")?Integer?id);


????@RequestMapping(value?=?"/get1",?method?=?RequestMethod.GET)
????public?String?get1();

????@RequestMapping(value?=?"/get2/{param}",?method?=?RequestMethod.GET)
????public?String?get2(@RequestParam("param")?String?param);

????@RequestMapping(value?=?"/post1",?method?=?RequestMethod.POST)
????public?FeignDemo?post1(@RequestBody?FeignDemo?demo);
復制代碼

1.4 編寫對應的服務端

@RestController
@RequestMapping("/feign/server")
public?class?FeignServerController?{

????@GetMapping("/get1")
????public?String?get1()?{
????????return?"get1";
????}
????@GetMapping("/get2/{para}")
????public?String?get2(@PathVariable("para")?String?para){
????????return?para;
????}
????@PostMapping("/post1")
????public?FeignDemo??post1(@RequestBody?FeignDemo?demo)?{
????????return?demo;
????}
}
復制代碼
public?class?FeignDemo?{
????private?String?name;
????private?Integer?age;

????public?String?getName()?{
????????return?name;
????}

????public?void?setName(String?name)?{
????????this.name?=?name;
????}

????public?Integer?getAge()?{
????????return?age;
????}

????public?void?setAge(Integer?age)?{
????????this.age?=?age;
????}

????@Override
????public?String?toString()?{
????????return?"FeignDemo{"?+
????????????????"name='"?+?name?+?'''?+
????????????????",?age="?+?age?+
????????????????'}';
????}
}
復制代碼

1.5 調用 FeignClient

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes?=?{FeignApplication.class},webEnvironment?=?SpringBootTest.WebEnvironment.DEFINED_PORT)
@ActiveProfiles("dev,feign")
public?class?FeignClientTest?{

????@Autowired
????private?TestService?testService;

????@Test
????public?void?testFallback(){
????????testService.getError(1);
????}
????@Test
????public?void?testGet1(){
????????System.out.println(testService.get1());
????????System.out.println(testService.get2("abc"));
????????System.out.printf("..");
????????FeignDemo?feignDemo?=?new?FeignDemo();
????????feignDemo.setName("name");
????????feignDemo.setAge(1);
????????System.out.println(testService.post1(feignDemo));
????}

@Component
????public?class?DefaultFallback?implements?TestService?{

????????@Override
????????public?String?getError(@RequestParam("id")?Integer?id){
????????????return?"";
????????}

????????@Override
????????public?String?get1()?{
????????????return?null;
????????}

????????@Override
????????public?String?get2(String?param)?{
????????????return?null;
????????}

????????@Override
????????public?FeignDemo?post1(FeignDemo?demo)?{
????????????return?null;
????????}

????}
}
復制代碼

二、如何切換 Client

Feign 中自帶的是 HttpURLConnection,這個 client 健壯性差,可替換為成熟的 Apache HttpClient 或 OkHttp 來進行網絡請求。

2.1 使用 Apache 的 HTTP Client

使用 Apache 的?httpclient?替換 Feign 中默認的 client。

2.1.1 添加依賴

<!--httpclient的依賴,因為選擇了使用httpclient-->
<dependency>
????<groupId>org.apache.httpcomponents</groupId>
????<artifactId>httpclient</artifactId>
</dependency>
<dependency>
????<groupId>io.github.openfeign</groupId>
????<artifactId>feign-httpclient</artifactId>
????<version>10.4.0</version>
</dependency>
復制代碼

2.1.2 配置啟用

配置中添加如下信息,表示啟用httpclient。

feign:
??httpclient:
????enabled:?true
復制代碼

2.2 使用 OkHttp

2.2.1 添加依賴

在 Feign 中使用OkHttp作為網絡請求框架,則只需要在 pom 文件中加上feign-okhttp的依賴,代碼如下:

<dependency>
????<groupId>io.github.openfeign</groupId>
????<artifactId>feign-okhttp</artifactId>
????<version>10.2.0</version>
</dependency>
復制代碼

2.2.2 配置啟用

feign:
??okhttp:
????enabled:?true
復制代碼

三、如何修改日志級別

在發(fā)送和接收請求的時候,其內部將日志的打印輸出定義成了四個等級,對應的詳情如下:

級別 說明
NONE 不做任何記錄
BASIC 僅記錄請求方法和 URL 以及響應狀態(tài)代碼和執(zhí)行時間
HEADERS 記錄基本信息以及請求和響應標頭
FULL 記錄請求和響應的標題,正文和元數據

3.1 通過配置文件修改日志級別

注意需要指定接口的全限定名

logging:
??level:
????com.zto.titans.test.feign.service.TestService?:?DEBUG
復制代碼

3.2 通過配置類修改日志級別

@Configuration
public?class?FooConfiguration?{
????@Bean
????Logger.Level?feignLoggerLevel()?{
????????return?Logger.Level.FULL;
????}
}
復制代碼

這個一看即懂,不再廢話。

四、如何實現數據壓縮

可以分別對 HTTP 通信的requestresponse設置是否啟用 GZIP 壓縮,配置方法如下:

feign:
????compression:
????????request:
????????????enabled:?true
????????????mime-types:?text/xml,application/xml,application/json?#?配置壓縮支持的MIME?TYPE
????????????min-request-size:?2048??#?配置壓縮數據大小的下限
????????response:
????????????enabled:?true?#?配置響應GZIP壓縮
復制代碼

五、FeignClient 的配置以及配置的優(yōu)先級機制

有 2 種途徑設置 FeignClient 的配置,通過自定義配置類來設置配置和在配置文件中設置,其中配置文件方式有點特殊,它里邊可以指定全局配置對所有 FeignClient 有效,也可以為特定名稱的 FeignClient 設置專屬的配置。

5.1 通過自定義配置類來定制配置

實現一個配置類

public?class?TestConfiguration?{
????@Bean
????Logger.Level?feignLoggerLevel()?{
????????return?Logger.Level.FULL;
????}
}
復制代碼

將配置類?TestConfiguration?指定給configuration。

@FeignClient(
????????name?=?"test-service",
????????configuration?=?{FeignInterceptor2.class,TestConfiguration.class}
)
復制代碼

5.2 在配置文件中設置全局配置

feign.client.config.default.xxx ,這個default意為全局的配置屬性。

feign:
??client:
????config:
??????default:
????????connectTimeout:?5000
????????readTimeout:?5000
????????loggerLevel:?basic
復制代碼

5.3 在配置文件中設置專屬配置

feign.client.config.feignName.xxx , 給名字為feignNameFeignClient指定專屬的配置。

feign:
??client:
????config:
??????feignName:
????????connectTimeout:?5000
????????readTimeout:?5000
????????loggerLevel:?full
????????errorDecoder:?com.example.SimpleErrorDecoder
????????retryer:?com.example.SimpleRetryer
????????requestInterceptors:
??????????-?com.example.FooRequestInterceptor
??????????-?com.example.BarRequestInterceptor
????????decode404:?false
????????encoder:?com.example.SimpleEncoder
????????decoder:?com.example.SimpleDecoder
復制代碼

5.4 理解配置的優(yōu)先級與攔截器的追加原則

org.springframework.cloud.openfeign.FeignClientFactoryBean#configureFeign中可以確認以上 3 種配置的優(yōu)先級:

configureUsingConfiguration(context,?builder);?//?1
configureUsingProperties(properties.getConfig().get(properties.getDefaultConfig()),builder);?//2
configureUsingProperties(properties.getConfig().get(this.contextId),builder);//3
復制代碼
  1. 第 1 類為通過自定義配置類來指定配置
  2. 第 2 類為在配置文件中的feign.client.config.default.xxx設置全局配置
  3. 第 3 類為在配置文件中的feign.client.config.feignName.xxx設置專屬配置

5.4.1 優(yōu)先級的效果

配置文件里的專屬配置?-覆蓋->?配置文件里的全局配置?-覆蓋->?配置類的配置

5.4.2 追加的原則

RequestInterceptor?是攔截器,可以在發(fā)送前做一些處理,比如統(tǒng)一添加header信息。每一類中的requestInterceptors可以存儲多個攔截器,攔截器并非覆蓋的效果,而是鏈式追加的效果;從執(zhí)行順序來看優(yōu)先級是:1 > 2 > 3,即先執(zhí)行?配置類中指定的攔截器,然后是?配置文件中指定的全局攔截器,最后是配置文件中指定的專屬攔截器

需特別注意:RequestInterceptor?的實現類(例如 RI-A,RI-B)上如果添加了@Component注解,就都會被掃描識別到,并被追加到第一類的requestInterceptors列表中;倘若不小心 RI-A 還在第 2 類中又被指定了,則還會將攔截器 RI-A 追加在第二類的requestInterceptors列表中,結果是會 RI-A 總計會執(zhí)行 2 次;若也在第三類中指定 RI-A,則 RI-A 也在其列表中追加,結果是 RI-A 總計會執(zhí)行 3 次。

5.4.3 攔截器的效果驗證

以一個實例來驗證說明效果

  • 自定義三個 RequestInterceptor
class?FeignInterceptor?implements?RequestInterceptor?{
????@Override
????public?void?apply(RequestTemplate?requestTemplate)?{
????????requestTemplate.header("user",?"myuser1");
????????requestTemplate.header("password",?"mypassword");
????}
}
復制代碼
class?FeignInterceptor1?implements?RequestInterceptor?{
????@Override
????public?void?apply(RequestTemplate?requestTemplate)?{
????????requestTemplate.header("user1",?"myuser1");
????????requestTemplate.header("password1",?"mypassword1");
????}
}
復制代碼
class?FeignInterceptor2?implements?RequestInterceptor?{
????@Override
????public?void?apply(RequestTemplate?requestTemplate)?{
????????requestTemplate.header("user2",?"myuser2");
????????requestTemplate.header("password2",?"mypassword2");
????}
}
復制代碼
  • @FeignClient 中指定一個
@FeignClient(
????????name?=?"test-service",
????????url?=?"http://localhost:8080/feign/server/",
????????configuration?=?{FeignInterceptor.class,TestConfiguration.class},
????????fallback?=?TestService.DefaultFallback.class
)
復制代碼
  • 配置中指定 2 個

default?指定了一個,test-service里指定一個

feign:
??httpclient:
????enabled:?true
??okhttp:
????enabled:?true
??client:
????config:
??????default:
????????connectTimeout:?5000
????????readTimeout:?5000
????????#loggerLevel:?none
????????requestInterceptors:
??????????-?com.zto.titans.test.feign.service.FeignInterceptor1
??????test-service:
????????#loggerLevel:?basic
????????requestInterceptors:
??????????-?com.zto.titans.test.feign.service.FeignInterceptor2
logging:
??level:
????com.zto.titans.test.feign.service.TestService?:?DEBUG
復制代碼

根據追加邏輯,最終執(zhí)行的順序是:

  1. FeignInterceptor
  2. FeignInterceptor1
  3. FeignInterceptor2

總結

本篇主要介紹 SpringBoot 中要玩轉 Feign 需要掌握的如添加 pom 依賴、客戶端注解啟用、切換底層 HttpClient、配置數據壓縮、調整日志級別、定制配置、配置的優(yōu)先級機制、增加攔截器以及攔截器的追加機制等知識,以實例 + 效果的方式幫讀者高效全面并深入的理解它們。

最后說一句(請關注,莫錯過)

如果這篇文章對您有幫助,或者有所啟發(fā)的話,歡迎關注公眾號【 架構染色 】進行交流和學習。您的支持是我堅持寫作最大的動力。文章來源地址http://www.zghlxwxcb.cn/news/detail-408387.html

到了這里,關于SpringBoot 使用 Feign 無廢話 All-in-one 指南的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 群暉網絡UPS服務器-PVE All In One使用UPS

    群暉網絡UPS服務器-PVE All In One使用UPS

    UPS只有一根USB數據連接線,但同時給兩個硬件設備供電,目的是實現斷電時兩個硬件(三套系統(tǒng))自動關機。 實現方案:USB直接連接的黑群暉1設置為服務器,將UPS的狀態(tài)共享給運行在副NAS硬件上的黑群暉2和PVE,斷電時黑群暉2和PVE也都能獲取到電源狀態(tài),也自動關機。 群暉

    2024年04月25日
    瀏覽(18)
  • 機器人SLAM導航學習-All in one

    機器人SLAM導航學習-All in one

    參考引用 張虎,機器人SLAM導航核心技術與實戰(zhàn)[M]. 機械工業(yè)出版社,2022. 本博客未詳盡之處可自行查閱上述書籍 移動機器人激光SLAM導航(文章鏈接匯總) 1. ROS 入門必備知識 ROS學習筆記(文章鏈接匯總) 2. C++ 編程范式 《21天學通C++》讀書筆記(文章鏈接匯總) 3. OpenCV 圖像

    2024年02月16日
    瀏覽(45)
  • SD WebUI 擴展:prompt-all-in-one

    SD WebUI 擴展:prompt-all-in-one

    sd-webui-prompt-all-in-one 是一個基于 Stable Diffusion WebUI 的擴展,旨在提高提示詞/反向提示詞輸入框的使用體驗。它擁有更直觀、強大的輸入界面功能,它提供了自動翻譯、歷史記錄和收藏等功能,它支持多種語言,滿足不同用戶的需求,尤其給英文不好但又想玩 AI 繪畫的用戶帶

    2024年02月12日
    瀏覽(30)
  • 如何在 macOS 上進行 STM32 開發(fā) All In One

    如何在 macOS 上進行 STM32 開發(fā) All In One

    網上好多 STM32 的教學視頻的開發(fā)環(huán)境都是基于 Windows 系統(tǒng)的,對 macOS 用戶直接勸退了 在 Mac 上安裝 虛擬機 ,在虛擬機中運行 Windows 系統(tǒng) ?? VirtualBox / VMWare https://www.virtualbox.org/ https://www.vmware.com/sg.html 使用 STM 官方免費開發(fā)工具 STM32CubeIDE , 基于 Eclipse IDE ? (3 GB, 占用存儲空

    2024年02月06日
    瀏覽(20)
  • Visual C++ Redistributable 一鍵安裝All In One Runtimes

    老版本的程序需要在客戶端安裝低版本的VC運行庫Visual Studio,但網上第三方找到的軟件要么無法下載,要么版本低,或者要求付費,而且常常有病毒,或者根本就是垃圾廣告。 因此從微軟廠商下載,并編寫了一個非常簡單的腳本一鍵安裝(右鍵以管理員方式安裝)??赡馨姹静灰?/p>

    2024年02月04日
    瀏覽(38)
  • 新一代分布式融合存儲,數據場景All In One

    新一代分布式融合存儲,數據場景All In One

    ????????2023年5月11日,浪潮信息全國巡展廣州站正式啟航。會上,重磅發(fā)布新一代分布式融合存儲AS13000G7,其采用極致融合架構設計理念,實現同一套存儲滿足四種非結構化數據的“All In One”高效融合,數據存力提升300%,IO性能提升100%;同時,實現四種非結構化協(xié)議無損

    2024年02月13日
    瀏覽(14)
  • 瓴羊發(fā)布All in One 產品,零售SaaS的盡頭是DaaS?

    瓴羊發(fā)布All in One 產品,零售SaaS的盡頭是DaaS?

    “打破煙囪、化繁為簡,讓豐富的能力、數據和智能All in One”,這是瓴羊新發(fā)布的產品瓴羊One承擔的使命,也意味著瓴羊DaaS事業(yè)邁入了一個新階段。 成立伊始,瓴羊就打出了“Not SaaS,But DaaS”旗號,將自己的產品“五朵云”定位為DaaS(Data intelligence as a Service)。如果說“

    2024年02月13日
    瀏覽(22)
  • 值得收藏【Markdown】皇額娘級教你玩轉vscode插件: Markdown All in One

    值得收藏【Markdown】皇額娘級教你玩轉vscode插件: Markdown All in One

    vscode Markdown All in One vscode中的Markdown All in One插件目前下載量:6,103,710,實力水平輕而易舉的可以看出來了,相比于大名鼎鼎的Typora最大的良心優(yōu)勢就是free !free !free !對于窮苦人來說是極好的,贊~~~ 截至目前最新版本:v3.5.1 安裝方式相對簡單,如圖操作1~4步: 安裝完成之后狀

    2024年02月04日
    瀏覽(19)
  • Stable Diffusion - 提示詞翻譯插件 sd-webui-prompt-all-in-one

    Stable Diffusion - 提示詞翻譯插件 sd-webui-prompt-all-in-one

    歡迎關注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/131649921 sd-webui-prompt-all-in-one 是一個基于 stable-diffusion-webui 的擴展,目的是提高 提示詞 / 反向提示詞 輸入框的使用體驗,擁有更直觀、強大的輸入界面功能,提供了自動翻譯、歷史記錄和收

    2024年02月16日
    瀏覽(32)
  • [環(huán)境配置]讓sd自動翻譯提示詞插件sd-webui-prompt-all-in-one安裝

    [環(huán)境配置]讓sd自動翻譯提示詞插件sd-webui-prompt-all-in-one安裝

    方式一(使用git克?。?此方法需要你的電腦上安裝了 git,如果沒有安裝,可參考?git 官方文檔?進行安裝。 打開終端,進入到你的? stable-diffusion-webui ?目錄下。? 使用 git 克隆? sd-webui-prompt-all-in-one ?到? stable-diffusion-webuiextensions ?目錄下。 如果你的終端沒有訪問Github的

    2024年02月14日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包