public class HystrixTest extends HystrixCommand<String> {
private final String name;
public HystrixTest(String name, Integer timeout) {
super(Setter
.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"))
.andCommandPropertiesDefaults(
HystrixCommandProperties.Setter()
.withExecutionTimeoutInMilliseconds(timeout))
);
this.name = name;
}
@Override
protected String run() throws Exception {
Thread.sleep(500);
return "Hello:" + name + "," + Thread.currentThread().getName();
}
/**
* 所有从 run() 抛出的异常都算作失败,并触发降级 getFallback() 和 断路器逻辑。
*/
@Override
protected String getFallback() {
return String.format("\"%s\" timeout", name);
}
public static void main(String[] args) {
HystrixTest hystrixTest = new HystrixTest("Test Execute 1", 1000);
System.out.println(hystrixTest.execute()); // 输出:Hello:Test Execute 1,hystrix-ExampleGroup-1
HystrixTest hystrixTest2 = new HystrixTest("Test Execute 2", 100);
System.out.println(hystrixTest2.execute()); // 输出:Hello:Test Execute 2,hystrix-ExampleGroup-2
}
}
我发现,第一次:HystrixTest hystrixTest = new HystrixTest("Test Execute 1", 1000);
会影响第一次:HystrixTest hystrixTest2 = new HystrixTest("Test Execute 2", 100);
初始化对象的参数,也就是:.withExecutionTimeoutInMilliseconds(timeout)) 这个通过构造函数传进来的参数好像无效了。
因此,hystrixTest2 应该因为超时,而执行 getFallback(...) ,但是并没有。