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

  • 相关阅读:
    Activator.CreateInstance 反射实例化对象
    MVC Form提交
    Redis 下载
    List<T> 序列化与反序列化
    快速反射DataTable
    数据库特性
    javascript判断文件大小
    MD5
    HttpHelper
    cacheHelper
  • 原文地址:https://www.cnblogs.com/zz0412/p/feign.html
Copyright © 2011-2022 走看看