lhs472194266
Haisen大王
2021-01-15 20:54

【Hystrix】自定义 Hystrix,多次初始化对象,怎么参数相同呢?

  • java
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(...) ,但是并没有。

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

0条回答