Spring Cloud Hystrix 在第一次命令调用时失败
Posted
技术标签:
【中文标题】Spring Cloud Hystrix 在第一次命令调用时失败【英文标题】:Spring Cloud Hystrix fails at first command call 【发布时间】:2016-07-04 11:13:17 【问题描述】:我注意到第一个 Hystrix 命令总是调用我的后备命令,之后以下调用在 Spring Cloud Netflix 中运行良好。
我应该设置任何设置来避免它吗?为什么会这样?
【问题讨论】:
只有在出现异常时才会调用回退。如果你想获得更多的洞察力,我想你需要分享代码。 问题是相同的方法在第二次调用中工作正常,问题仅针对第一个。我读到有关热身的文章,但没有找到任何解决方案。 添加其他详细信息(代码、配置等)以准确突出您需要的内容。 这里是场景:服务启动,eureka server显示dashboard上注册的服务,启动UI客户端,调用hystrix方法时触发fallback方法。在第二次调用 hystrix 方法时,feign 客户端工作正常并从远程服务获取响应。你能试试这个场景看看会发生什么吗? 【参考方案1】:我通过 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
【讨论】:
【参考方案2】:看起来像基础设施初始化的副作用,并且在它上面超时https://groups.google.com/d/msg/hystrixoss/_jnxAyS20lA/fWo0ZAHoxt8J
【讨论】:
是的,我看到了...但其中没有解释解决方案。我该如何解决? 猜这个问题没有通用的解决方案:(github.com/Netflix/Hystrix/issues/810。当然你可以尝试为“手动预热”设置大多数超时,但不确定这是个好主意。 如何设置此手册预热?为什么不是一个好主意? tks. 理论上,您可以尝试为少数第一次请求设置更大的超时并将其设置为默认值,但这是一个非常糟糕的主意,因为您正在尝试解决应用程序 lvl 上 IO 中的问题。在应用程序启动时跳过几个超时错误或忽略第一次发生的错误呢? 这听起来像是解决第一次异常的解决方法,这在 hytrix 中真的很尴尬。为什么有人会投射这种行为?以上是关于Spring Cloud Hystrix 在第一次命令调用时失败的主要内容,如果未能解决你的问题,请参考以下文章
解决Spring Cloud中Feign第一次请求失败的问题
Spring Cloud (10) Hystrix-监控面板
Spring Cloud第八篇 | Hystrix集群监控Turbine
spring cloud: Hystrix:Hystrix的断容器监控dashboard