8

特定のグループに対してサーキット ブレーカーをプログラムで強制的に開放したいと考えています。グループ内のコマンドに構成を設定して強制的に開き、そのコマンドを実行することで、それができるかもしれないと思いました。しかし、それはうまくいかないようです。これは可能ですか?別のアプローチをとるべきですか?これは、2回目の assertEquals 呼び出しで失敗する、私が試したテストです。

import com.netflix.hystrix.HystrixCommand;
import com.netflix.hystrix.HystrixCommandGroupKey;
import com.netflix.hystrix.HystrixCommandProperties;
import org.junit.Test;
import static org.junit.Assert.assertEquals;

public class ForceCircuitBreakerCommandTest {

    @Test
    public void testForceOpen(){

        assertEquals(Boolean.TRUE, new FakeCommand().execute());

        new OpenCircuitBreakerCommand().execute();

        assertEquals(Boolean.FALSE, new FakeCommand().execute());

    }

    private class FakeCommand extends HystrixCommand<Boolean> {

        public FakeCommand(){
            super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("TestGroup")));
        }

        @Override
        public Boolean run(){return Boolean.TRUE;}

        @Override
        public Boolean getFallback() {return Boolean.FALSE;}
    }

    private class OpenCircuitBreakerCommand extends HystrixCommand<Boolean> {

        public OpenCircuitBreakerCommand(){
            super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("TestGroup"))
                    .andCommandPropertiesDefaults(HystrixCommandProperties.Setter()
                                    .withCircuitBreakerForceOpen(true)));
        }

        @Override
        public Boolean run(){return Boolean.TRUE;}

        @Override
        public Boolean getFallback() {return Boolean.FALSE;}
    }
}
4

3 に答える 3

17

次のようなカスタムプロパティを設定"hystrix.command.HystrixCommandKey.circuitBreaker.forceOpen"しました

import com.netflix.config.ConfigurationManager;

ConfigurationManager.getConfigInstance()
    .setProperty("hystrix.command.HystrixCommandKey.circuitBreaker.forceOpen",
    true);

ConfigurationManager内部で使用される Archaius インスタンスです。

于 2015-03-21T03:18:32.547 に答える
0

必ずしも使用する必要はありませんConfigurationManager。そのテストは言う必要があります:

@Test
public void testForceOpen() {
    assertEquals(Boolean.TRUE, new FakeCommand().execute());
    assertEquals(Boolean.FALSE, new OpenCircuitBreakerCommand().execute());
}
于 2016-06-28T18:28:52.787 に答える