Spring Cloud Hystrix在第一次命令调用时失败

时间:2016-03-17 21:16:53

标签: java spring spring-boot spring-cloud hystrix

我注意到第一个Hystrix命令总是调用我的回退,之后在Spring Cloud Netflix中以下调用正常工作。

我应该设置任何设置以避免它吗?为什么会这样?

2 个答案:

答案 0 :(得分:9)

看起来像基础架构初始化的副作用,并且作为超时https://groups.google.com/d/msg/hystrixoss/_jnxAyS20lA/fWo0ZAHoxt8J

答案 1 :(得分:0)

我解决了该问题,方法是再次通过 fallback 方法发送失败的请求,这次使用DicoveryClient查找一个远程Pod的IP:

private String getNameFallback(int delay) {
    RestTemplate rt = new RestTemplate();
    return rt.getForObject(getUrl(delay), String.class);
}

private String getUrl(int delay) {
    String url = String.format("http://%s/name?delay=%d", SERVICE_ID, delay);
    if (discoveryClient != null) {
        Optional<ServiceInstance> svc = discoveryClient.getInstances(SERVICE_ID).stream().findFirst();
        if (svc.isPresent()) {
            String host = svc.get().getHost();
            int port = svc.get().getPort();
            url = "http://" + host + ":" + port + "?delay=" + delay;
        }
    }
    return url;
}

您可以找到更多详细信息here