3-4Feign 配置重试 · SpringCloud微服务实战 · 看云

5. 配置重试

导航

本节代码地址


5.1 方式一(代码配置)

在config添加重试的Bean,Feign 模式是不重试的,如果通过Retryer.Default()开启的话,默认是5次重试,可以自定义修改重试次数

@Bean
    public Retryer feignRetryer() {

        
        return  new Retryer.Default(100, 1000, 4);
    }

5.1.1 重试配置源码

可以看到默认的配置是100毫秒到1秒之间,重试5次

public Default() {
    this(100L, TimeUnit.SECONDS.toMillis(1L), 5);
}

5.1.2 调整配置

修改application.yml的配置,设施超时时间

feign:
  client:
    config:
      default:
        connectTimeout: 10000
        readTimeout: 10000

fw-cloud-client-eurekaTestController添加随机的睡眠时间

@GetMapping("/hello")
public String hello() throws InterruptedException {

    int millis = new Random().nextInt(3000);
    System.out.println("client线程休眠时间:"+millis);
    Thread.sleep(millis);
    return "hello:"+serverPort;
}

5.1.3 测试效果

重启应用,Postman 调用接口localhost:8771/feignInfo,可以看到重试了4次
3bfb195b3aa1a27d7ac2f7e4d6a18634_MD5.webp

ac99602b6f230372724761574ecc7066_MD5.webp

5.2 方式二 (文件配置)

5.1.1 配置修改

#重试
ribbon:
  #配置首台服务器重试1次
  MaxAutoRetries: 1
  #配置其他服务器重试两次
  MaxAutoRetriesNextServer: 2
  #链接超时时间
  ConnectTimeout: 500
  #请求处理时间
  ReadTimeout: 500
  #每个操作都开启重试机制
  OkToRetryOnAllOperations: true
#配置断路器超时时间,默认是1000(1秒)
feign:
  hystrix:
    enabled: true
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 2100

5.2.2 编码调整

跟方式一一样
fw-cloud-client-eurekaTestController添加随机的睡眠时间

@GetMapping("/hello")
public String hello() throws InterruptedException {

    int millis = new Random().nextInt(3000);
    System.out.println("client线程休眠时间:"+millis);
    Thread.sleep(millis);
    return "hello:"+serverPort;
}

5.2.3配置介绍

配置 说明
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds 断路器的超时时间需要大于ribbon的超时时间,不然不会触发重试。
fw-register-eureka-client.ribbon.ConnectTimeout 请求连接的超时时间
fw-register-eureka-client.ribbon.ribbon.ReadTimeout 请求处理的超时时间
fw-register-eureka-client.ribbon.ribbon.OkToRetryOnAllOperations 是否对所有操作请求都进行重试
fw-register-eureka-client.ribbon.ribbon.MaxAutoRetriesNextServer 重试负载均衡其他的实例最大重试次数,不包括首次server
fw-register-eureka-client.ribbon.ribbon.MaxAutoRetries 同一台实例最大重试次数,不包括首次调用

5.2.4 测试效果

重启应用,Postman 调用接口localhost:8771/feignInfo,可以看到重试了5次,默认的次数,当然如果测试不到5次,说明重试成功了。
a0b3651fdf6d6b6fabb30ee3c336a4c5_MD5.webp