我正在将Hystrix集成到一个应用程序中。该应用程序已经投入生产,我们将在沙盒中测试hystrix集成工作,然后再将其推向生产阶段。 我的问题是,有没有办法使用一些配置设置打开/关闭hystrix功能?
答案 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)
有两种方法可以实现这一目标-
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;
}
答案 5 :(得分:0)
在这种情况下,我想使用单个属性完全关闭Hystrix(我们使用IBM uDeploy管理动态属性)。我们正在使用建立在Hystrix之上的javanica库
@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