请问老师,我在做服务超时的测试,spring boot 版本为2.0.5.RELEASE spring cloud的版本为Finchley.SR1
。我引入了spring-cloud-starter-netflix-hystrix的2.0.2.RELEASE版本以及 hystrix-javanica的1.5.12版本。在启动类上也加了@EnableCircuitBreaker,我在API模块通过feign向order模块发出请求,为了测试超时时间,我在order的方法里写上了Thread.sleep(2000);经过多次测试后我发现:
1、请求方法上加上@HystrixCommand(fallbackMethod = "xxx",commandProperties={@HystrixProperty=(name = "execution.isolation.thread.timeoutInMilliseconds",value = "3000")})
配置文件上加上:ribbon.ReadTimeout = 5000 ribbon.ConnectTimeout = 5000
结果:超时设置无效,请求发出1秒以后就会降级。
2、请求方法上加上@HystrixCommand(fallbackMethod = "xxx",commandKey="hello")
配置文件上加上:ribbon.ReadTimeout = 5000 ribbon.ConnectTimeout = 5000 hystrix.command.hello.execution.isolation.thread.timeoutInMilliseconds = 3000
或者我干脆
hystrix.command."类名#方法名()".execution.isolation.thread.timeoutInMilliseconds = 3000
结果:超时设置无效,请求发出1秒以后就会降级。
3、只在配置文件上加:hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000
ribbon.ReadTimeout = 5000 ribbon.ConnectTimeout = 5000
结果:超时设置成功,请求能保持到两秒多返回预期结果。
所以问题就是我花了一天的时间用了各种方式去配置超时时间发现都是无效的,只有修改默认的超时时间是成功的。请问老师这会是什么原因呢?应该怎么解决?
展开
作者回复: 你是用的我们的例子在试的么?我们的例子里用了Feign,所以你在createOrder上设置execution.isolation.thread.timeoutInMilliseconds感觉没效果,你需要针对Feign设置超时。这也就是为什么你把默认的超时改长了就管用了。