timed-out and no fallback available:
這個錯誤基本是出現在Hystrix熔斷器,熔斷器的作用是判斷該服務能不能通,如果通了就不管了,調用在指定時間內超時時,就會通過熔斷器進行錯誤返回。
一般設置如下配置的其中一個即可:
1、把時間設長
這里設置5秒
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000
2、把超時發生異常屬性關閉
hystrix.command.default.execution.timeout.enabled=false
3、禁用feign的hystrix
feign.hystrix.enabled: false
failed and no fallback available:
而通過上面設置只是針對熔斷器的錯誤關閉,並不能解決根本問題,比如Feign客戶端調用遠程服務時,默認為8秒超時時間,如果在規定時間內沒有返回,同樣會跳轉到熔斷器進行處理。即使關閉了熔斷器的錯誤,但是總的錯誤處理還會是有這個問題出現。
那么要解決根本問題,就要從請求超時時間入手,因為有些服務可能存在調用時間長的問題,所以直接配置:
ribbon.ReadTimeout=60000
ribbon.ConnectTimeout=60000
這些才是真正解決請求超時的問題,如果不設置這個,被調用接口很慢時,會出現Read Timeout on Request。
而針對調用失敗重試的次數也可以設置:
ribbon.maxAutoRetries=0
參考:
https://github.com/spring-cloud/spring-cloud-netflix/issues/321
https://stackoverflow.com/questions/38080283/how-to-solve-timeout-feignclient
http://www.itmuch.com/spring-cloud-feign-ribbon-first-request-fail/
https://github.com/spring-cloud/spring-cloud-netflix/issues/696
http://www.jianshu.com/p/0eb13fd033a8