2015-03-20 5 views
6

Я хотел бы программно заставить автоматический выключатель открыть для определенной группы. Я думал, что смогу это сделать, установив конфигурацию в команде в группе, чтобы принудительно открыть ее и запустить эту команду. Однако это не работает. Это возможно? Должен ли я придерживаться другого подхода? Вот тест, который я пробовал, который терпит неудачу во втором вызове assertEquals.Как отключить автоматический выключатель Hystrix?

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;} 
    } 
} 

ответ

13

Я установить пользовательские свойства, такие как "hystrix.command.HystrixCommandKey.circuitBreaker.forceOpen" с использованием

import com.netflix.config.ConfigurationManager; 

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

ConfigurationManager является экземпляром Archaius, который используется внутри.

0

Вам необязательно использовать ConfigurationManager. Этот тест должен сказать:

@Test 
public void testForceOpen() { 
    assertEquals(Boolean.TRUE, new FakeCommand().execute()); 
    assertEquals(Boolean.FALSE, new OpenCircuitBreakerCommand().execute()); 
} 
0

Это редактировать на тест с использованием Senthilkumar Gopal «сек ответ

@Test 
public void testForceOpen() { 

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

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

    assertEquals(Boolean.FALSE, new OpenCircuitBreakerCommand().execute()); 
} 
+0

Просьба представить контекст, что вы редактировали и почему – Count

Смежные вопросы