- httpclient–請求方瀏覽器
connectTimeOut:建立連接時間 三次握手 org.apache.http.conn.HttpHostConnectException: Connect to 1.2.3.4:80 [/1.2.3.4] failed: Connection timed out: connect
socketTimeOut:鏈接建立成功后,數(shù)據(jù)包傳輸之間時間超時限制,數(shù)據(jù)包,非此次接口調(diào)用時間,一定要設(shè)置 否則長時間等待
java.net.SocketTimeoutException: Read timed out
connectionRequestTimeOut:從連接池獲取連接的超時限制,不常用 - nginx–響應(yīng)方服務(wù)器
client_header_timeout:讀取客戶端請求頭超時時間,默認(rèn)為60s,如果在此超時時間內(nèi)客戶端沒有發(fā)送完請求頭,則響應(yīng)408(RequestTime-out)
client_body_timeout:同上
send_timeout
keepalive_timeout timeout [header_timeout]:關(guān)聯(lián)httpclient連接池 重要:設(shè)置HTTP長連接超時時間,其中,第一個參數(shù)timeout是告訴Nginx長連接超時時間是多少,默認(rèn)為75s。第二個參數(shù)header_timeout是用于設(shè)置響應(yīng)頭“Keep-Alive: timeout=time”,即告知客戶端長連接超時時間。兩個參數(shù)可以不一樣,“Keep-Alive:timeout=time”響應(yīng)頭可以在Mozilla和Konqueror系列瀏覽器起作用,而MSIE長連接默認(rèn)大約為60s,而不會使用“Keep-Alive: timeout=time”。如Httpclient框架會使用“Keep-Alive: timeout=time”響應(yīng)頭的超時(如果不設(shè)置默認(rèn),則認(rèn)為是永久)。如果timeout設(shè)置為0,則表示禁用長連接。
還有各種轉(zhuǎn)發(fā)超時 - Spring Cloud各個框架超時配置
feign:default或feignName或contextId:feign 作為最前端暴露給用戶使用的,一般其超時設(shè)置相當(dāng)于對用戶的一個承諾,所以Spring在處理這一塊的時候,會有意識地使用feign的超時時間來設(shè)置后面的ribbon 和http client組件。需要注意的是:hystrix的超時處理和feign之間在當(dāng)前的Spring Cloud框架規(guī)劃中,并沒有相關(guān)關(guān)系。
feign.client.config.default.connectTimeout:網(wǎng)絡(luò)連接
feign.client.config.default.readTimeout:數(shù)據(jù)讀取
hystrix:Hystrix的超時設(shè)置,在于命令執(zhí)行的時間,一般而言,這個時間要稍微比Feign的超時時間稍微長些,因為Command除了請求調(diào)用之外,還有一些業(yè)務(wù)代碼消耗。Hystrix的超時時間是站在命令執(zhí)行時間來看的,和Feign設(shè)置的超時時間在設(shè)置上并沒有關(guān)聯(lián)關(guān)系。Hystrix不僅僅可以封裝Http調(diào)用,還可以封裝任意的代碼執(zhí)行片段。Hystrix是從命令對象的角度去定義,某個命令執(zhí)行的超時時間,超過此此時間,命令將會直接熔斷。假設(shè)hystrix 的默認(rèn)超時時間設(shè)置了10000,即10秒,而feign 設(shè)置的是20秒,那么Hystrix會在10秒到來是直接熔斷返回,不會等到feign的20秒執(zhí)行結(jié)束,也不會中斷尚未執(zhí)行完的feign調(diào)用。
hystrix.command.default.execution.isolation.strategy = THREAD
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds = 10000
hystrix.command.default.execution.timeout.enabled = true
hystrix.command.default.execution.isolation.thread.interruptOnTimeout = true
hystrix.command.default.execution.isolation.thread.interruptOnFutureCancel = false
ribbon:當(dāng)feign設(shè)置了超時時間,Ribbon會依據(jù)feign的設(shè)置同步。Ribbon的這個超時時間,用于指導(dǎo)真正調(diào)用接口時,設(shè)置真正實現(xiàn)者的超時時間。Ribbon和Feign是相對獨立的組件,在一個Spring Cloud框架運行環(huán)境中,可以沒有Feign。那么,在這種場景下,假設(shè)Http Client客戶端使用的是OKHttp,并且通過ribbon.okhttp.enabled 指定ribbon調(diào)用時,會使用ribbon的超時配置來初始化OkHttp.為了保證整個組件調(diào)用鏈的超時關(guān)系,一般Spring Cloud采取的策略是:依賴方的超時配置覆蓋被依賴方的配置。當(dāng)然這個也不是絕對的,實際上對于Feign而言,可以直接指定Feign和HttpClient之間的配置關(guān)系
feign.httpclient.maxConnections = 200http //client大連接數(shù),默認(rèn)200
feign.httpclient.maxConnectionsPerRoute= 50 //每個IP路由大連接數(shù)量
feign.httpclient.timeToLive = 900 //連接存活時間
feign.httpclient.timeToLiveUnit = SECONDS //連接存活時間單位
feign.httpclient.connectionTimeout = 2000 //連接超時時間
fein.httpclient.connectionTimeout=3000 //連接超時定時器的執(zhí)行頻率
Hystrix的超時時間和Feign或者Http Client的超時時間關(guān)系
Hystrix的超時意義是從代碼執(zhí)行時間層面控制超時;而Feign或Http Client 則是通過Http底層TCP/IP的偏網(wǎng)絡(luò)層層面控制的超時。
建議是:一般情況下,Hystrix 的超時時間要大于Feign或Http Client的超時時間;而對于特殊需求的接口調(diào)用上,為了避免等待時間太長,需要將對應(yīng)的Hystrix command 超時時間配置的偏小一點,滿足業(yè)務(wù)側(cè)的要求。
zuul
zuul.host.socket-timeout-millis=2000 #默認(rèn)1000
zuul.host.connect-timeout-millis=4000 #默認(rèn)2000
others
#斷路器詳細(xì)設(shè)置
#當(dāng)在配置時間窗口內(nèi)達(dá)到此數(shù)量的失敗后,進(jìn)行短路。默認(rèn)20個)
#hystrix.command.default.circuitBreaker.requestVolumeThreshold=20
#短路多久以后開始嘗試是否恢復(fù),默認(rèn)5s)
#hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5
#出錯百分比閾值,當(dāng)達(dá)到此閾值后,開始短路。默認(rèn)50%)
#hystrix.command.default.circuitBreaker.errorThresholdPercentage=50%
#重試機(jī)制
#該參數(shù)用來開啟重試機(jī)制,默認(rèn)是關(guān)閉
spring.cloud.loadbalancer.retry.enabled=true
#對所有操作請求都進(jìn)行重試
ribbon.OkToRetryOnAllOperations=true
#對當(dāng)前實例的重試次數(shù)
ribbon.MaxAutoRetries=1
#切換實例的重試次數(shù)
ribbon.MaxAutoRetriesNextServer=1
#根據(jù)如上配置,當(dāng)訪問到故障請求的時候,它會再嘗試訪問一次當(dāng)前實例(次數(shù)由MaxAutoRetries配置),如果不行,就換一個實例進(jìn)行訪問,如果還是不行,再換一次實例訪問(更換次數(shù)由MaxAutoRetriesNextServer配置),
zuul請求也是通過Ribbon負(fù)載均衡客戶端去調(diào)用其他服務(wù)的,ribbon客戶端默認(rèn)是用HttpClient來發(fā)起http請求調(diào)用,ribbon內(nèi)部又會構(gòu)造hystrix command來執(zhí)行請求(所以我們常說ribbon的超時時間設(shè)置要大于等于hystrix 超時時間,不然導(dǎo)致command還沒執(zhí)行完,ribbon卻超時了)

創(chuàng)新互聯(lián)提供
成都做網(wǎng)站、成都網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計,
成都品牌網(wǎng)站建設(shè),
廣告投放平臺等致力于企業(yè)網(wǎng)站建設(shè)與公司網(wǎng)站制作,十余年的網(wǎng)站開發(fā)和建站經(jīng)驗,助力企業(yè)信息化建設(shè),成功案例突破近1000家,是您實現(xiàn)網(wǎng)站建設(shè)的好選擇.
feign調(diào)用原理


Ribbon有哪些負(fù)載均衡策略:
輪詢策略
權(quán)重策略
隨機(jī)策略
最小連接數(shù)策略
重試策略
可用性敏感策略
區(qū)域敏感策略
Feign和Ribbon的重試機(jī)制相當(dāng)于一個雙層循環(huán),feign重試機(jī)制在外層,Ribbon的重試機(jī)制在里層,每執(zhí)行一次feign的重試機(jī)制,內(nèi)層的Ribbon的重試機(jī)制都會全部執(zhí)行一次。Feign和OpenFeign的底層就是Ribbon,所以當(dāng)項目使用了Feign或OpenFeign的重試機(jī)制,就不要開啟Ribbon的重試機(jī)制,反之亦然。否則重試配置重疊,實際重試次數(shù)是二者的笛卡爾積。
ribbon的重試機(jī)制是使用RequestSpecificRetryHandler和LoadBalancerCommand來處理的,我們可以在配置文件定義參數(shù),Spring框架會自動幫我們加載到RequestSpecificRetryHandler和LoadBalancerCommand的屬性中去
feign的重試機(jī)制的實現(xiàn)類是Retryer,他的核心參數(shù)含義如下:
maxAttempts-大嘗試次數(shù),默認(rèn)值為5,首次請求也算一次,請求1次,重試4次。
period;-初始時間,用于參與計算線程休眠時間。
maxPeriod;-線程休眠的單次大時間上限。
attempt;-嘗試次數(shù),每次嘗試+1。
sleptForMillis;-線程累計休眠總時間。
Spring Cloud組件那么多超時設(shè)置,我們?nèi)绾卫斫夂瓦\用?
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
名稱欄目:http各種超時配置-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://www.chinadenli.net/article12/djdogc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供全網(wǎng)營銷推廣、網(wǎng)站導(dǎo)航、網(wǎng)站設(shè)計公司、營銷型網(wǎng)站建設(shè)、App開發(fā)、微信公眾號
廣告
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源:
創(chuàng)新互聯(lián)