2017-09-14 1 views
1

내 springboot 서비스에서 회로 차단기 개념을 구현하기 위해 hystrix를 사용하고 있습니다. 다음과 같이 내가 스로틀에게 실패의 문턱 수의 경우 외부 서비스를 호출 할 필요가 방법에 사용하는 HystrixCommand 주석입니다 : 이제동적 hystrix 명령을 만드는 방법 threadPoolKey

@HystrixCommand(commandKey = "myCommandKey", 
      groupKey = "myGroupKey", 
      threadPoolKey = "myThreadPoolKey") 
    public String myHystrixMethod(String someParam) { ....} 

, myHystrixMethod가 다른 클라이언트에 의해 호출있는 서비스를 제공합니다. 서비스를 호출하는 클라이언트의 유형에 따라 특정 클라이언트에 대해 지정된 백엔드 서비스를 호출하는 논리가 있습니다.

내가 원하는 것은 특정 클라이언트에 의해 호출 된 모든 스레드 (요청)를 자체 hystrix 스레드 풀에 등록하는 것입니다. 즉, 클라이언트 A의 요청은 클라이언트 A의 경우 hystrix 스레드 풀에 등록되고 클라이언트 B의 경우 hystrix 스레드 풀의 클라이언트 B에만 등록됩니다. 이렇게하면 내 서비스에 대한 클라이언트 B의 요청이 클라이언트 A의 실패로 인해 제한되지 않습니다.

이렇게하려면 모든 클라이언트에 대해 개별 서비스 메소드 (위에 표시된 것)를 생성하고 그에 따라 hystrix 스레드 풀의 이름을 지정할 수 있습니다. 그러나이 방법을 사용하면 새 클라이언트가있을 때마다 소스 코드를 수정하여 서비스 메소드를 추가해야합니다.

이 경우 클라이언트 ID 인 매개 변수를 기반으로 @HystrixCommand 주석 안에 옵션을 동적으로 만들 수있는 방법이 있습니까?

+0

나는 그것이 가능하지 않다고 생각한다. 봐라. https://github.com/Netflix/Hystrix/issues/350 – pvpkiran

+0

hystrix와 같이 보이지는 않습니다. hystriix와 같은 다른 회로 차단기 솔루션에는 동적으로 그러한 속성을 생성하는 좋은 옵션이 있습니까? – Hary

+0

지루함과 탄력성 4j와 같은 다른 사서가 있습니다. 그러나 나는 당신이이 특징을 거기에서 발견 할 것이라고 생각하지 않는다. 외모를 가지고 우리에게 알려주십시오. :) – pvpkiran

답변

0

Hystrix 라이브러리를 사용하여 어떤 방식 으로든 할 수는 없지만 Resilience4J 라이브러리를 기반으로하는 솔루션은 여기에있는 다른 회로 차단기 구현을 요청했기 때문에 가능합니다.

응용 프로그램 컨텍스트에서 CircuitBreakerRegistry bean을 클라이언트의 기본 구성으로 등록 할 수 있습니다.

@Bean 
public CircuitBreakerRegistry circuitBreakerRegistry() { 
    CircuitBreakerConfig config = CircuitBreakerConfig.custom() 
      .failureRateThreshold(35) 
      .ringBufferSizeInClosedState(1000) 
      .ringBufferSizeInHalfOpenState(100) 
      .waitDurationInOpenState(Duration.ofMinutes(1)) 
      .build(); 
    return CircuitBreakerRegistry.of(config); 
} 

그런 다음이 레지스트리를 서비스에 삽입하고 보호 된 방법으로 CB를 얻을 수 있습니다.

CircuitBreaker circuitBreaker = circuitBreakerRegistry.circuitBreaker("ClientA"); 

이 작업은 이미 등록 된 회로 차단기를 찾거나 필요한 경우 레지스트리 기본 구성을 사용하여 새 차단기를 만듭니다.

이제 CircuitBreaker 선택 방법 isCallPermitted() 또는 executeRunnable() 또는 기타를 사용할 수 있습니다.

자세한 내용은 User Guide을 참조하십시오.