使用eureka服务ID

时间:2018-06-08 00:41:15

标签: spring-boot hystrix netflix-feign spring-cloud-feign feign

我有一个使用Declarative Feign Client

的spring-boot应用程序
@ComponentScan
@EnableFeignClients
@EnableCircuitBreaker
@EnableDiscoveryClient
@EnableZuulProxy
@FeignClient(name = "${service-registry-name}", fallbackFactory = MyFallbackFactory.class, configuration = CommonFeignConfiguration.class)
public interface MyClient {

    @RequestMapping(method = RequestMethod.GET, path = "/test/reference/data")
    HttpEntity<String> getAllData();}

我有以下application.yml

feign:
  okhttp:
    enabled: true

feign:
  hystrix:
    enabled: true

hystrix:
  command:
    MyClient#getAllData():
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 30000

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


logging:
  level:
    project:
      user:
        MyClient: DEBUG

feign:
  client:
    config:
      feign-name:
        requestInterceptors: com.test.MyRequestHeaderProcessor

这个spring-boot应用程序运行得非常好,当我调试时,我可以看到超时值30000已正确应用。

当我将此代码用作独立的spring boot应用程序而不是作为依赖jar进入另一个项目时,麻烦就开始了。

此时,超时始终为1000,这是默认值。我设法覆盖了这一点。但尽管如此,我得到了HystrixRunTimeException,Timeout with null。

我有feign.hystrix.enabled = true。

如果我使用feign.hystrix.enabled = false,我可以看到我的请求没有超时但是后备机制无法工作。

但是,当我在FeignClient中添加URL属性时,它工作正常并且不会超时。我不能依赖URL属性,因为它来自可以更改的云代工服务URL。

1 个答案:

答案 0 :(得分:0)

在Application.yml文件中添加以下属性。

feign:
  client: 
    config: 
      default:
         connectTimeout: 80000000
         readTimeout: 80000000