我有一个Spring Boot REST服务,它使用来自Spring Cloud Netflix的Hystrix。我注意到第一次调用接口需要很长时间来处理,因为第一次调用与Hystrix隔离的方法需要2-3秒才能加载Hystrix。
这是代码:
@HystrixCommand(ignoreExceptions = { BusinessException.class,
TechnicalException.class }, fallbackMethod = "testFall", commandProperties = {
@HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "15000") })
public void test() throws BusinessException, TechnicalException {
System.out.println("Inside");
}
有没有办法预加载Hystrix,以免发生这种情况?
答案 0 :(得分:0)
我遇到了同样的问题(丢失“仅” 500毫秒)。
发生在第一次初始化HystrixCommandGroup时。创建HystrixMetrics时,大多数时间都浪费了: hystrix profiling
我创建了一个问题:https://github.com/Netflix/Hystrix/issues/1832
不幸的是,只有在调用带注释的方法时,才会初始化HystrixCommand(以及HystrixCommandGroup中的)。您无法对其进行预编译。解决方法是,可以使用抽象的HystrixCommand类代替注释,并在启动时创建一个虚拟实例。例如:
public class TestCommand extends HystrixCommand<String> {
static {
new TestCommand();
}
protected TestCommand() {
super(HystrixCommandGroupKey.Factory.asKey("mygroup"));
}
@Override
protected String run() throws Exception {
// TODO Auto-generated method stub
return null;
}
}