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

 


版权声明:本文为qq_40693828原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。