feign可以把rest請求進行封裝,將遠端呼叫的請求封裝成本地請求的方式,不需要再手動拼接url和路徑
1請求路徑
2請求引數
3請求方式
4返回結果
我們使用註解的方式將此四項引數提供給feign,feign即可幫我們自動完成一次遠端請求
註解:主類上方加入:
@enablefeignclients新建乙個介面,並使用註解方式提供4項引數:
服務呼叫**的改變:
原來的**:
改為:
string user = userclient.querybyid(id); //此處看起來就是本地的呼叫了乙個方法
}public string fallback(long id)
}主類:
改為:除此之外feign還支援請求壓縮和日誌級別,此處不詳述
openfeign超時時長設定及詳解
概念明確:
1 hystrix可配置的部分
hystrix.command.default.execution.timeout.enable=true //為false則超時控制有ribbon控制,為true則hystrix超時和ribbon超時都是用,但是誰小誰生效,預設為truehystrix.command.default.
execution.isolation.thread.timeoutinmilliseconds=3000//熔斷器的超時時長預設1秒,最常修改的引數
circuitbreaker.requestvolumethreshold=20 //觸發熔斷的最小請求次數,預設為20
circuitbreaker.sleepwindowinmilliseconds=5000 //休眠時長,預設為5秒
circuitbreaker.errorthresholdpercentage=50 //觸發熔斷的失敗請求最小佔比,預設50%2 ribbon的可配置部分
ribbon.readtimeout=1000 //處理請求的超時時間,預設為1秒
ribbon.connecttimeout=1000 //連線建立的超時時長,預設1秒
ribbon.maxautoretries=1 //同一臺例項的最大重試次數,但是不包括首次呼叫,預設為1次
ribbon.maxautoretriesnextserver=0 //重試負載均衡其他例項的最大重試次數,不包括首次呼叫,預設為0次3 feign的可配置部分ribbon.oktoretryonalloperations=false //是否對所有操作都重試,預設false
feign.hystrix.enabled
=false //feign是否啟用斷路器,預設為false
feign.client.config.default.connecttimeout
=10000 //feign的連線建立超時時間,預設為10秒
另外以上各種超時配置,如果都存在,則時間小的配置生效feign.client.config.default.readtimeout=60000
//feign的請求處理超時時間,預設為60
feign.client.config.default.retryer=feign.retryer.default
//feign使用預設的超時配置,在該類原始碼中可見,預設單次請求最大時長1秒,重試5次
好的,現在來說feign的超時時長設定:
1 feign的預設配置,是不啟用hystrix,並且feign的底層是呼叫ribbon來實現負載均衡的,所以為了不和ribbon的重試機制衝突因此也不會啟用重試機制
因此配置feign是必須要做的就是
feign.hystrix.enabled
=true //開啟feign的hystrix,這樣配置檔案中的hystrix的配置才會生效,否則依然是預設的規則
之後設定hystrix的相關配置才可以在feign中生效,因為feign也呼叫了hystrix
2 ribbon和hystrix的配置
因為hystrix的超時時長,預設為1秒,太短了!因此我們一般一定會設定hystrix的超時時長
在上面啟用了feign的hystrix開關後,配置hystrix超時時長
execution.isolation.thread.timeoutinmilliseconds=10000 //這裡設定了10秒然後看ribbon的超時設定:
ribbon的超時設定無非2個:處理超時和連線超時,預設為1秒和1秒
但是,ribbon是有預設重試的,也是2個:統一例項的重試次數和負載均衡的不同例項的重試次數,預設為1次和0次
也就是說,在同乙個例項上建立連線如果失敗可以重試1次,處理請求如果失敗可以重試1次,但是不包括首次呼叫,即:實際ribbon的超時時間是 1秒×2+1秒×2,即4秒
之後是,但是上面設定了hystrix超時為10秒,因此ribbon超時優先生效
最後是1個是否對所有操作重試的開關,預設為false,這裡解釋下什麼是所有操作:
即:為false是,get請求不論是連線失敗還是處理失敗都會重試,而對於非get請求只對連線失敗進行重試
因此得出結論,在使用了feign的情況下需先開啟斷路器支援,之後配置hystrix的timeoutinmillisecond大於ribbon的 ( connecttimeout + readtimeout ) × 2即可
也就是說以後以後的配置中常用的配置項就是
1 開啟feign的hystrix開關
2 hystrix超時時長
3 配置ribbon的connecttimeout時長
4 配置ribbon的readtimeout 時長
SpringBoot常用註解及介紹
parmas 指定request中必須包含某些引數值,才讓該方法處理。headers 指定request中必須包含某些指定的header值,才能讓該方法處理請求。method 指定請求的method型別 consumes 指定處理請求的提交內容型別,content type produces 指定返...
Ribbon常用註解及配置
ribbon在服務呼叫方使用 常用註解及範例 服務呼叫方 原理 ribbon會攔截resttemplate之後取出 user server 字串,以 user server 作為服務id找eureka獲取服務例項,之後自動進行拼接 即自動拼接位址及埠 並使用拼接後的url重新傳送請求 因此 load...
JUnit執行流程及常用註解
一 執行流程 在test資料夾下新建乙個junittest測試類,勾選自動提供的四個method stubs。package com.junit import static org.junit.assert.import org.junit.after import org.junit.afterc...