1 背景: 在進行Feign調用時對于耗時較長的業務會發生逾時而傳回異常,以此需要根據業務需求配置逾時時間,其中涉及到Hystrix逾時時間和Ribbon逾時時間,對于Hystrix的隔離機制分為信号量隔離和線程池隔離,對于請求業務和處理業務在一個線程的推薦采用信号量隔離,對于rpc調用等耗時業務采用線程池隔離,預設逾時時長為1s,當逾時後會熔斷處理。
#hystrix的逾時時間
hystrix:
command:
default:
execution:
timeout:
enabled: true
isolation:
thread:
timeoutInMilliseconds: 9000
#ribbon的逾時時間
ribbon:
ReadTimeout: 3000
ConnectTimeout: 3000
2 重試機制:feign的逾時時間為hystrix和rabbin的總時間,然而逾時的請求并不是直接傳回異常,當第一次請求逾時請求失敗時往往會重試目前請求,對于feign調用預設關閉掉了feign的重試,采用ribbon負載均衡重試:
ribbon:
ReadTimeout: 3000
ConnectTimeout: 3000
MaxAutoRetries: 1 #同一台執行個體最大重試次數,不包括首次調用
MaxAutoRetriesNextServer: 1 #重試負載均衡其他的執行個體最大重試次數,不包括首次調用
OkToRetryOnAllOperations: false #是否所有操作都重試
注意:hystrix逾時時間要大于ribbon的逾時時間,否則ribbon的重試是沒有任何意義的,以為當hystrix逾時了會熔斷降級(當然需要自己手動指定降級邏輯處理),就不會進行ribbon的重試。
