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-eureka中TestController添加随机的睡眠时间
@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次
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-eureka中TestController添加随机的睡眠时间
@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次,说明重试成功了。


