原文連接 :https://codeday.me/collect/20171109/97634.htmlhtml
若是是zuul(網關)的超時時間須要設置zuul、hystrix、ribbon等三部分:spring
#zuul超時設置
#默認1000
zuul.host.socket-timeout-millis=2000
#默認2000
zuul.host.connect-timeout-millis=4000socket
#熔斷器啓用
feign.hystrix.enabled=true
hystrix.command.default.execution.timeout.enabled=true
#斷路器的超時時間,下級服務返回超出熔斷器時間,即使成功,消費端消息也是TIMEOUT,因此通常斷路器的超時時間須要大於ribbon的超時時間。
#服務的返回時間大於ribbon的超時時間,會觸發重試
##默認=1000,過小
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=60000ui
#斷路器詳細設置
#當在配置時間窗口內達到此數量的失敗後,進行短路。默認20個)
#hystrix.command.default.circuitBreaker.requestVolumeThreshold=20
#短路多久之後開始嘗試是否恢復,默認5s)
#hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5
#出錯百分比閾值,當達到此閾值後,開始短路。默認50%)
#hystrix.command.default.circuitBreaker.errorThresholdPercentage=50%
#ribbon請求鏈接的超時時間- 限制3秒內必須請求到服務,並不限制服務處理的返回時間
ribbon.ConnectTimeout=3000
#請求處理的超時時間 下級服務響應最大時間,超出時間消費方(路由也是消費方)返回timeout
ribbon.ReadTimeout=5000
# 單獨設置某個服務的超時時間,會覆蓋其餘的超時時間限制,服務的名稱已註冊中心頁面顯示的名稱爲準,超時時間不可大於斷路器的超時時間
#service-a.ribbon.ReadTimeout=60000
#service-a.ribbon.ConnectTimeout=60000spa
#重試機制
#該參數用來開啓重試機制,默認是關閉
spring.cloud.loadbalancer.retry.enabled=true
#對全部操做請求都進行重試
ribbon.OkToRetryOnAllOperations=true
#對當前實例的重試次數
ribbon.MaxAutoRetries=1
#切換實例的重試次數
ribbon.MaxAutoRetriesNextServer=1
#根據如上配置,當訪問到故障請求的時候,它會再嘗試訪問一次當前實例(次數由MaxAutoRetries配置),
#若是不行,就換一個實例進行訪問,若是仍是不行,再換一次實例訪問(更換次數由MaxAutoRetriesNextServer配置),
#若是依然不行,返回失敗信息。code
最後說一下springcloud運行機制,我的理解不對地方但願指正htm
首先 請求經過網關去請求服務,ci
第一步去嘗試鏈接服務,這裏有一個鏈接時間,以判斷是否超時,鏈接成功以後,去獲取資源,有一個獲取時間,以判斷讀取是否超時。若是第一步超時了,springcloud
進行第二步,會進行對當前實例的重試,好比網關是去獲取服務A1,有一個重試次數,若是當前實例獲取失敗,切換到另外實例A2,或者A3之類,這裏也有重試次數。若是都失敗了,那麼進行斷路(熔斷?),表示服務A不能夠,另外有一種斷路的方式是按照實例掛掉的比例來判斷是否斷路。資源
第三步 ,一段時間以後,會去監測A服務是否恢復,這裏有一個多久嘗試恢復的時機間隔。