Hystrixをアプリケーションに統合しています。そのアプリケーションはすでに本番環境にあり、本番環境にプッシュする前に、サンドボックスでhystrix統合作業をテストします。私の質問は、いくつかの構成設定を使用してhystrix機能をオン/オフにする方法はありますか?
これには単一の設定はありません。 Hystrixを無効にするには、複数のパラメーターを設定する必要があります。
構成オプションについては、 https://github.com/Netflix/Hystrix/wiki/Configuration を参照してください。
hystrix.command.default.execution.isolation.strategy=SEMAPHORE
hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests=100000 # basically 'unlimited'
hystrix.command.default.execution.timeout.enabled=false
hystrix.command.default.circuitBreaker.enabled=false
hystrix.command.default.fallback.enabled=false
使用可能なパラメーターについては、Hystrixのバージョンを再確認してください。
これがあなたが必要とするすべてです:
# Disable Circuit Breaker (Hystrix)
spring:
cloud:
circuit:
breaker:
enabled: false
hystrix:
command:
default:
circuitBreaker:
enabled: false
Ahus1が言ったように、Hystrixを完全に無効にする単一の方法はありません。アプリケーションで無効にするために、HystrixCommandをラッパークラスに配置するのが最もクリーンで安全であり、ラッパークラスは使用したHystrixCommandの部分(この場合はexecute()メソッド)のみを公開することを決定しました。ラッパークラスを構築するときに、実行するコードを含むCallableを渡します。Hystrixが無効になっている場合(独自の構成値に従って)、HystrixCommandを作成せずにそのCallableを呼び出すだけです。これにより、Hystrixコードの実行が一切回避され、Hystrixがアプリケーションに影響を与えていないことを簡単に言うことができますまったく無効になっている場合。
単一のプロパティを使用してHystrixを完全にオフにしたいというこの状況に遭遇しました(動的プロパティの管理にはIBM uDeployを使用しています)。 Hystrix上に構築されたjavanicaライブラリを使用しています
@Configuration
public class HystrixConfiguration{
@Bean(name = "hystrixCommandAspect")
@Conditional(HystrixEnableCondition.class)
public HystrixCommandAspect hystrixCommandAspect(){
return new HystrixCommandAspect()}
}
</ code>
public class HystrixEnableCondition implements Condition{
@Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata){
return
"YES".equalsIgnoreCase(
context.getEnvironment().getProperty("circuitBreaker.enabled")) ||
"YES".equalsIgnoreCase(
System.getProperty("circuitBreaker.enabled"));
}
}
これを達成する方法はいくつかあります-
hystrix.command.{group-key}.circuitBreaker.forceClosed=false
#2-のJavaコード
@Pointcut("@annotation(com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand)")
public void hystrixCommandAnnotationPointcut() {
}
@Around("hystrixCommandAnnotationPointcut()")
public Object methodsAnnotatedWithHystrixCommand(final ProceedingJoinPoint joinPoint) throws Throwable {
Object result = null;
Method method = AopUtils.getMethodFromTarget(joinPoint);
if ((System.getProperty(enable.hystrix).equals("true")) {
result = joinPoint.proceed();
} else {
result = method.invoke(joinPoint.getTarget(), joinPoint.getArgs());
}
return result;
}
プロジェクトがSpringManagedの場合は、applicationContext.xmlでhystrixAspectのBean定義にコメントできます。次の行にコメントします。
bean id = "hystrixAspect" class = "com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect" />
これにより、プロジェクトからHystrixが削除されます。