我有一个使用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。
答案 0 :(得分:0)
在Application.yml文件中添加以下属性。
feign:
client:
config:
default:
connectTimeout: 80000000
readTimeout: 80000000