我正在将Hystrix集成到一个应用程序中。该应用程序已经在生产环境中使用,我们将在沙盒中测试hystrix集成工作,然后再推向生产环境。 我的问题是是否有一种方式可以通过某些配置设置来开启/关闭Hystrix功能?
我正在将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
有几种方法可以实现此功能 -
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;
}
这将从您的项目中移除Hystrix。bean id="hystrixAspect"class="com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect"/>
只需要设置
hystrix.command.default.execution.isolation.strategy=SEMAPHORE
即可。此外,你可以或者应该禁用超时线程,
使用 hystrix.command.default.execution.timeout.enabled=false
我遇到了这样一种情况,我想使用单个属性完全关闭Hystrix(我们使用IBM uDeploy管理动态属性)。我们使用建立在Hystrix之上的javanica库。
@配置 公共类 HystrixConfiguration{
@Bean(name = "hystrixCommandAspect")
@Conditional(HystrixEnableCondition.class)
public HystrixCommandAspect hystrixCommandAspect(){
return new HystrixCommandAspect()}
}
2. 而且条件类将基于系统属性启用。
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"));
}
}