关闭Hystrix功能

时间:2016-03-18 17:40:46

标签: hystrix

我正在将Hystrix集成到一个应用程序中。该应用程序已经投入生产,我们将在沙盒中测试hystrix集成工作,然后再将其推向生产阶段。 我的问题是,有没有办法使用一些配置设置打开/关闭hystrix功能?

7 个答案:

答案 0 :(得分:6)

没有单一的设置。您需要设置多个参数才能禁用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版本以获取可用参数。

答案 1 :(得分:3)

这就是您所需要的:

# Disable Circuit Breaker (Hystrix)

spring:
  cloud:
    circuit:
      breaker:
        enabled: false

hystrix:
  command:
    default:
      circuitBreaker:
        enabled: false

答案 2 :(得分:2)

正如ahus1所说,没有一种方法可以完全禁用Hystrix。要在我们的应用程序中禁用它,我们认为将HystrixCommand放在包装类中是最干净和最安全的,并且该包装类只暴露了我们使用的HystrixCommand的部分(在我们的例子中,是execute()方法)。在构造包装类时,我们传递一个包含我们想要执行的代码的Callable,如果Hystrix被禁用(根据我们自己的配置值),我们只需调用Callable而不创建HystrixCommand。这样可以避免执行任何Hystrix代码,并且更容易说Hystrix在禁用时不会影响我们的应用程序

答案 3 :(得分:0)

如果您的项目是spring Managed,您可以在applicationContext.xml中注释hystrixAspect的bean定义 评论以下行

  

bean id =“hystrixAspect”class =“com.netflix.hystrix.contrib.javanica.aop.aspectj.HystrixCommandAspect”/>

这将从您的项目中删除Hystrix。

答案 4 :(得分:0)

有两种方法可以实现这一目标-

  1. 对每个组(包括默认组)执行此操作。尽管这不会禁用hystrix(只会一直保持电路闭合),但是您将获得相同的结果-

    hystrix.command.{group-key}.circuitBreaker.forceClosed=false

  2. 如果您使用的是Java,则可以在 @HystrixCommand 注释上创建环绕建议,并根据标志绕过hystrix执行。

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

答案 5 :(得分:0)

在这种情况下,我想使用单个属性完全关闭Hystrix(我们使用IBM uDeploy管理动态属性)。我们正在使用建立在Hystrix之上的javanica库

  1. 创建一个配置类,该类创建HystrixCommandAspect

@Configuration public class HystrixConfiguration{

@Bean(name = "hystrixCommandAspect")
@Conditional(HystrixEnableCondition.class)
public HystrixCommandAspect hystrixCommandAspect(){ 
      return new HystrixCommandAspect()}
}

2.并且将基于系统属性启用条件类。

@Bean(name = "hystrixCommandAspect")
@Conditional(HystrixEnableCondition.class)
public HystrixCommandAspect hystrixCommandAspect(){ 
      return new HystrixCommandAspect()}
}

答案 6 :(得分:0)

设置 hystrix.command.default.execution.isolation.strategy=SEMAPHORE 足够的。 另外,您可能也应该禁用超时线程 与hystrix.command.default.execution.timeout.enabled=false