zoukankan      html  css  js  c++  java
  • 工作随笔——自动重发的凶手--feign

    公司使用的feign(https://github.com/OpenFeign/feign)作为http客户端。

    开发时debug后端程序,发现同一个请求会多次收到。

    为了判断是谁在搞鬼,在客户端和服务端中间加了一层代理。发现客户端发起了多次请求(代理工具有请求通过是会输出日志)。

    查看 Feign.java 发现有默认重试机制

    //  约102行
    private Retryer retryer = new Retryer.Default();
    
    
    // 约 127行
    ublic Builder retryer(Retryer retryer) {
          this.retryer = retryer;
          return this;
        }

     查看 Retryer.java 类,默认重试5次。

    public Default() {
      this(100, SECONDS.toMillis(1), 5);
    }
    // period参数的含义请查看
    nextMaxInterval()方法

    public Default(long period, long maxPeriod, int maxAttempts) {
      this.period = period;
    this
    .maxPeriod = maxPeriod;
    this
    .maxAttempts = maxAttempts;
    this
    .attempt = 1;
    }

    解决问题:

    Retryer retryer = new Retryer.Default(100, SECONDS.toMillis(1), 0);
    Feign.builder().retryer(retryer).encoder(new GsonEncoder()).decoder(new GsonDecoder()).logger(new Logger.JavaLogger().appendToFile("sdk.log")).logLevel(Level.FULL)
                    .target(AccountApi.class, apihost);

    如果Feign的版本在8.17.0及其以后:

    Retryer retryer = Retryer.NEVER_RETRY;
    Feign.builder().retryer(retryer).encoder(new GsonEncoder()).decoder(new GsonDecoder()).logger(new Logger.JavaLogger().appendToFile("sdk.log")).logLevel(Level.FULL)
                    .target(AccountApi.class, apihost);

    以上--end

  • 相关阅读:
    配置Yaf
    计算机科学中最重要的32个算法
    mysql show status详解
    Structs 在Struts.xml中配置action时,action的name属性最好首字母大写
    MyEclipse创建ssh项目和连接数据库
    Myeclipse安装svn插件
    win7安装ubuntu双系统
    Java查看API和源码的方法
    华为oj平台的新网址
    详细解析Java中抽象类和接口的区别
  • 原文地址:https://www.cnblogs.com/zz0412/p/feign.html
Copyright © 2011-2022 走看看