SpringCloud Feign高級(jí)配置詳解
1、Feign對負(fù)載均衡的支持
Feign 本身已經(jīng)集成了Ribbon依賴和自動(dòng)配置,因此我們不需要額外引入依賴,可以通過 ribbon.xx 來進(jìn)行全局配置,也可以通過服務(wù)名.ribbon.xx 來對指定服務(wù)進(jìn)行細(xì)節(jié)配置配置(參考之前,此處略)
Feign默認(rèn)的請求處理超時(shí)時(shí)長1s,有時(shí)候我們的業(yè)務(wù)確實(shí)執(zhí)行的需要一定時(shí)間,那么這個(gè)時(shí)候,我們就需要調(diào)整請求處理超時(shí)時(shí)長,F(xiàn)eign自己有超時(shí)設(shè)置,如果配置Ribbon的超時(shí),則會(huì)以Ribbon的為準(zhǔn)。
Ribbon設(shè)置
#針對的被調(diào)用方微服務(wù)名稱,不加就是全局生效
lagou-service-resume:
ribbon:
#請求連接超時(shí)時(shí)間
ConnectTimeout: 2000
#請求處理超時(shí)時(shí)間
ReadTimeout: 15000 # Feign 超時(shí)時(shí)間設(shè)置
#對所有操作都進(jìn)?重試
OkToRetryOnAllOperations: true
####根據(jù)如上配置,當(dāng)訪問到故障請求的時(shí)候,它會(huì)再嘗試訪問?次當(dāng)前實(shí)例(次數(shù)由MaxAutoRetries配置),
####如果不?,就換?個(gè)實(shí)例進(jìn)?訪問,如果還不?,再換?次實(shí)例訪問(更換次數(shù)由MaxAutoRetriesNextServer配置),
####如果依然不?,返回失敗信息。
MaxAutoRetries: 0 #對當(dāng)前選中實(shí)例重試次數(shù),不包括第?次調(diào)?
MaxAutoRetriesNextServer: 0 #切換實(shí)例的重試次數(shù)
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #負(fù)載策略調(diào)整
2、Feign對熔斷器的支持
在Feign客戶端工程配置文件(application.yml)中開啟Feign對熔斷器的支持。
# 開啟Feign的熔斷功能
feign:
hystrix:
enabled: true
Feign的超時(shí)時(shí)長設(shè)置那其實(shí)就上面Ribbon的超時(shí)時(shí)長設(shè)置,Hystrix超時(shí)設(shè)置(就按照之前Hystrix設(shè)置的方式就OK了)
注意:
- 開啟Hystrix之后,F(xiàn)eign中的方法都會(huì)被進(jìn)行一個(gè)管理了,一旦出現(xiàn)問題就進(jìn)入對應(yīng)的回退邏輯處理
- 針對超時(shí)這一點(diǎn),當(dāng)前有兩個(gè)超時(shí)時(shí)間設(shè)置(Feign/hystrix),熔斷的時(shí)候是根據(jù)這兩個(gè)時(shí)間的最小值來進(jìn)行的,即處理時(shí)長超過最短的那個(gè)超時(shí)時(shí)間了就熔斷進(jìn)入回退降級(jí)邏輯
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 15000
自定義FallBack處理類(需要實(shí)現(xiàn)FeignClient接口)
package com.lagou.edu.controller.service; import org.springframework.stereotype.Component; /** * 降級(jí)回退邏輯需要定義一個(gè)類,實(shí)現(xiàn)FeignClient接口,實(shí)現(xiàn)接口中的方法 * 此接口是我們進(jìn)行Feign遠(yuǎn)程調(diào)用時(shí)所創(chuàng)建的接口 */ @Component public class ResumeFallback implements ResumeServiceFeignClient{ @Override public Integer findDefaultResumeState(Long userId) { return -6; } }
在@FeignClient注解中關(guān)聯(lián)2)中自定義的處理類
package com.lagou.edu.controller.service; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; // @FeignClient標(biāo)明當(dāng)前類是一個(gè)Feign客戶端,value指定該客戶端要請求的服務(wù)器名稱(登記到注冊中心上服務(wù)提供者的服務(wù)名稱) @FeignClient(value = "lagou-service-resume", fallback = ResumeFallback.class, path = "/resume") // 使?fallback的時(shí)候,類上的@RequestMapping的url前綴限定,改成配置在@FeignClient的path屬性中 // @RequestMapping("/resume") public interface ResumeServiceFeignClient { // feign要做的事情,拼裝url發(fā)起請求 // 我們調(diào)用該方法就是調(diào)用本地接口方法,那么實(shí)際上做的事遠(yuǎn)程請求 @GetMapping("/openstate/{userId}") public Integer findDefaultResumeState(@PathVariable Long userId); }
3、Feign對請求壓縮和響應(yīng)壓縮的支持
Feign 支持對請求和響應(yīng)進(jìn)行GZIP壓縮,以減少通信過程中的性能損耗。通過下面的參數(shù)即可開啟請求與響應(yīng)的壓縮功能:
feign:
compression:
request:
enabled: true # 開啟請求壓縮
mime-types: text/html,application/xml,application/json # 設(shè)置壓縮的數(shù)據(jù)類型,此處也是默認(rèn)值
min-request-size: 2048 # 設(shè)置觸發(fā)壓縮的??下限,此處也是默認(rèn)值
response:
enabled: true # 開啟響應(yīng)壓縮
4、Feign的日志級(jí)別配置
Feign是http請求客戶端,類似于咱們的瀏覽器,它在請求和接收響應(yīng)的時(shí)候,可以打印出比較詳細(xì)的?些日志信息(響應(yīng)頭,狀態(tài)碼等等)
如果我們想看到Feign請求時(shí)的日志,我們可以進(jìn)行配置,默認(rèn)情況下Feign的日志沒有開啟。
開啟Feign日志功能及級(jí)別
// Feign的?志級(jí)別(Feign請求過程信息) // NONE:默認(rèn)的,不顯示任何?志----性能最好 // BASIC:僅記錄請求?法、URL、響應(yīng)狀態(tài)碼以及執(zhí)?時(shí)間----?產(chǎn)問題追蹤 // HEADERS:在BASIC級(jí)別的基礎(chǔ)上,記錄請求和響應(yīng)的header // FULL:記錄請求和響應(yīng)的header、body和元數(shù)據(jù)----適?于開發(fā)及測試環(huán)境定位問題 import feign.Logger; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FeignLog { @Bean Logger.Level feignLevel() { return Logger.Level.FULL; } }
配置log日志級(jí)別為debug
logging:
level:
# Feign?志只會(huì)對?志級(jí)別為debug的做出響應(yīng)
com.lagou.edu.controller.service.ResumeServiceFeignClient: debug
到此這篇關(guān)于SpringCloud Feign高級(jí)配置詳解的文章就介紹到這了,更多相關(guān)SpringCloud Feign內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java實(shí)現(xiàn)會(huì)反彈的小球示例
這篇文章主要介紹了java實(shí)現(xiàn)會(huì)反彈的小球示例,需要的朋友可以參考下2014-04-04java文件重命名(文件批量重命名)實(shí)例程序代碼分享
這篇文章主要介紹了java文件重命名的程序代碼,大家參考使用吧2013-12-12聊聊Spring MVC JSON數(shù)據(jù)交互的問題
我們在開發(fā)中后端經(jīng)常需要接受來自于前端傳遞的Json字符串?dāng)?shù)據(jù),怎么把Json字符串轉(zhuǎn)換為Java對象呢?下面小編給大家?guī)砹薙pring MVC JSON數(shù)據(jù)交互的問題,感興趣的朋友一起看看吧2021-10-10Java利用happen-before規(guī)則如何實(shí)現(xiàn)共享變量的同步操作詳解
這篇文章主要給大家介紹了關(guān)于Java利用happen-before規(guī)則實(shí)現(xiàn)共享變量的同步操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06基于Java SSM框架實(shí)現(xiàn)簡易的評教系統(tǒng)
這篇文章主要介紹了通過Java SSM框架實(shí)現(xiàn)一個(gè)簡易的評教系統(tǒng)的示例代碼,文中的代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-02-02舉例講解Java的Hibernate框架中的多對一和一對多映射
這篇文章主要介紹了Java的Hibernate框架中的多對一和一對多映射,Hibernate是Java的SSH三大web開發(fā)框架之一,需要的朋友可以參考下2015-12-12Java設(shè)計(jì)模式之構(gòu)建者模式知識(shí)總結(jié)
這幾天剛好在復(fù)習(xí)Java的設(shè)計(jì)模式,今天就給小伙伴們?nèi)婵偨Y(jié)一下開發(fā)中最常用的設(shè)計(jì)模式-建造者模式的相關(guān)知識(shí),里面有很詳細(xì)的代碼示例及注釋哦,需要的朋友可以參考下2021-05-05詳解SpringBoot中RestTemplate的幾種實(shí)現(xiàn)
這篇文章主要介紹了詳解SpringBoot中RestTemplate的幾種實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11