openFeign常用註解及超時時間規則詳解

2022-08-23 23:09:14 字數 2976 閱讀 7662

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超時都是用,但是誰小誰生效,預設為true

hystrix.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次

ribbon.oktoretryonalloperations=false //是否對所有操作都重試,預設false

3 feign的可配置部分

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...