Hystrix - 第一次请求时响应缓慢

时间:2018-02-28 14:52:27

标签: spring spring-cloud-netflix hystrix

我有一个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,以免发生这种情况?

1 个答案:

答案 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;
    }

}