Может ли Hystrix открывать цепь в зависимости от параметров метода?

Если у меня есть следующая команда Hystrix:

public class TimeoutDependingOnParam extends HystrixCommand<String> {

    private final String name;

    public TimeoutDependingOnParam (String name) {
        super(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"));
        this.name = name;
    }

    @Override
    protected String run() {

        if (name.equals("Looong")) {
           waitABillionYears();
        }

        return "Hello " + name + "!";
    }
}

вызвано:

// no timeout for "Quick"
String s1 = new TimeoutDependingOnParam("Quick").execute();

// timeout for "Looong"
String s2 = new TimeoutDependingOnParam("Looong").execute();

Если Hystrix открывает канал из-за истечения времени ожидания вызова с «Looong», означает ли это, что вызов с «Quick» будет открыт для?


person Pleymor    schedule 17.12.2015    source источник


Ответы (1)


В основном ДА, если оба имеют одинаковую командную клавишу, как в вашем примере. Но для отключения автоматического выключателя есть дополнительные условия, , как указано в документации о автоматический выключатель.

Вы можете либо реализовать две разные команды, либо установить CommandKey в конструкторе в зависимости от параметров. Это выдержка из документации:

public CommandHelloWorld(String name) {
    super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"))
            .andCommandKey(HystrixCommandKey.Factory.asKey("HelloWorld")));
    this.name = name;
}
person ahus1    schedule 18.12.2015
comment
Спасибо, @ahus, так что думаю, я мог бы сделать что-то вроде publicTimeoutDependingOnParam (String name) {super(HystrixCommandGroupKey.Factory.asKey("TDPGroup")).andCommandKey(HystrixCommandKey.Factory.asKey("TDP" + name)));this.name = name;} - person Pleymor; 18.12.2015