【问题标题】:Hystrix fallback handling 2 dbcallHystrix 后备处理 2 dbcall
【发布时间】:2018-02-06 15:39:01
【问题描述】:

Hystrix 后备问题。 如果 dbcall1 由于某些故障而进入 fallback 并且发生短路,那么 dbcall2 也会每次进入 fallback 直到电路打开。

   public class CommandHelloFailure extends HystrixCommand<String> {

    private final String name;

    public CommandHelloFailure(String name) {
        super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
        this.name = name;
    }`enter code here`
String dbcall1 ()
{
new CommandHelloFailure().execute();
}
String dbcall2()
{
new CommandHelloFailure().execute();
}
    @Override
    protected String run() {
        throw new RuntimeException("this command always fails");
    }

    @Override
    protected String getFallback() {
        return "Hello Failure " + name + "!";
    }
}

但是我想要两个方法(数据库调用)的独立后备。

【问题讨论】:

  • 您的代码无法编译。请编辑并修复
  • 它的伪代码.. 我面临的问题是 1) 如果 dbcall1() 由于实际故障而回退并且发生短路,那么对于 withCircuitBreakerSleepWindowInMilliseconds 时间,调用(dbcall1( ) 和 dbcall2()) 进入后备状态。 @rjdkolb

标签: hystrix


【解决方案1】:

那是因为您没有指定HystrixCommandKey。如果不指定HystrixCommandKey,则HystrixCommandKey 派生自类名。即 CommandHelloFailure 将用作HystrixCommandKey

这意味着dbcall1dbcall2 将共享同一个断路器。 因为断路器是为每个HystrixCommandKey 而不是HystrixCommandGroupKey 创建的。

【讨论】:

    猜你喜欢
    • 2018-06-21
    • 2017-10-18
    • 2017-12-27
    • 2020-09-15
    • 2018-03-07
    • 2018-03-08
    • 2020-08-07
    • 2020-08-08
    • 2015-06-13
    相关资源
    最近更新 更多