zoukankan      html  css  js  c++  java
  • Feign 重试解析

    Spring cloud Feign 在restful 调用失败后,会进行重试。在没有到达指定重试次数,会一直重试。

     @Override
      public Object invoke(Object[] argv) throws Throwable {
        RequestTemplate template = buildTemplateFromArgs.create(argv);
        Retryer retryer = this.retryer.clone();
        while (true) {
          try {
            return executeAndDecode(template);
          } catch (RetryableException e) {
            retryer.continueOrPropagate(e);
            if (logLevel != Logger.Level.NONE) {
              logger.logRetry(metadata.configKey(), logLevel);
            }
            continue;
          }
        }
      }
    

     

    重试策略:

    public void continueOrPropagate(RetryableException e) {
          if (attempt++ >= maxAttempts) { //1. 超过最大重试次数,直接抛异常。
            throw e;
          }
    
          long interval;
          if (e.retryAfter() != null) {
            interval = e.retryAfter().getTime() - currentTimeMillis(); // 重试间隔
            if (interval > maxPeriod) { 
              interval = maxPeriod;
            }
            if (interval < 0) { //重试间隔到期,立即重试
              return;
            }
          } else {
            interval = nextMaxInterval();
          }
          try {
            Thread.sleep(interval); //未到期,线程休眠internal指定的时间
          } catch (InterruptedException ignored) {
            Thread.currentThread().interrupt();
          }
          sleptForMillis += interval; //统计线程休眠的时间
        }
    

      

  • 相关阅读:
    C#.ToString()格式大全
    C# 中的正则验证及用法
    解除SVN的控制
    SVN检出忽略文件夹文件
    Mac下查看及生成SSH Key
    Xcode-报错问题总结大全
    CentOS6.5上kafka 安装过程-多机版本
    神经网络绘图网址
    CentOs 中没有eth0文件
    Spring 入门
  • 原文地址:https://www.cnblogs.com/lzmrex/p/9466776.html
Copyright © 2011-2022 走看看