天天看點

SpringCloud- Ribbon與Feign的重試機制

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的重試。

SpringCloud- Ribbon與Feign的重試機制

繼續閱讀