搬砖小弟
Spring Cloud - 如何解决Feign/Ribbon第一次请求失败的问题
2019-07-13 / 1 min read

造成该问题的原因?
Hystrix默认的超时时间是1秒,如果超过这个时间尚未响应,将会进入fallback代码。而首次请求往往会比较慢(由于Ribbon是懒加载的,在首次请求时,才会开始初始化相关类),这个响应时间可能就大于1秒了。

1. 将Hystrix的超时设长

hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000

2. 禁用Hystrix超时

hystrix.command.default.execution.timeout.enabled: false

3. 为Feign禁用Hystrix

全局禁用

feign.hystrix.enabled: false

局部禁用

@FeignClient(name = "microservice-provider-user")
public interface UserFeignClient {
  @GetMapping("/users/{id}")
  User findById(@PathVariable("id") Long id);
}
class FooConfiguration {
  @Bean
  @Scope("prototype")
  public Feign.Builder feignBuilder(){
    return Feign.builder();
  }
}

4. Ribbon配置饥饿加载

ribbon:
  eager-load:
    enabled: true
    clients: client1, client2, client3