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; //统计线程休眠的时间
        }
    

      

  • 相关阅读:
    练习2-15 求简单交错序列前N项和(15 分)
    js预解析实例
    one:arguments对象伪数组
    第一章 评估工具
    第6章条件处理
    第五章----过程
    第4章 数据传递.寻址和算术运算
    第3章 汇编语言基础
    第2章-------------IA-32处理器体系结构
    第一章-------基本概念
  • 原文地址:https://www.cnblogs.com/lzmrex/p/9466776.html
Copyright © 2011-2022 走看看