Резервная обработка Hystrix 2 dbcall

Проблема с запасным вариантом Hystrix. Если dbcall1 переходит в резервный режим из-за какого-либо сбоя и происходит короткое замыкание, то dbcall2 также переходит в резервный режим каждый раз, пока цепь не разомкнется.

   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 + "!";
    }
}

Однако мне нужен независимый резерв для обоих методов (вызов БД).


person Nikita    schedule 29.08.2017    source источник
comment
Ваш код не компилируется. Пожалуйста, отредактируйте и исправьте   -  person rjdkolb    schedule 29.08.2017
comment
это псевдокод. Проблема, с которой я сталкиваюсь, заключается в следующем: 1) если dbcall1() переходит в резервный режим из-за фактического сбоя и происходит короткое замыкание, то для withCircuitBreakerSleepWindowInMilliseconds происходит вызов (dbcall1() и dbcall2()) отступать. @rjdkolb   -  person Nikita    schedule 29.08.2017


Ответы (1)


Это потому, что вы не указали HystrixCommandKey. Если вы не укажете HystrixCommandKey, HystrixCommandKey будет производным от имени класса. А именно CommandHelloFailure будет использоваться как HystrixCommandKey.

Это означает, что dbcall1 и dbcall2 будут использовать один и тот же автоматический выключатель. Поскольку Circuit Break создается для каждого HystrixCommandKey, а не HystrixCommandGroupKey.

person yongsung.yoon    schedule 01.09.2017