1

我使用 Spring boot 和 spring cloud starter hystrix 库创建了一个简单的应用程序。

在我的 build.gradle 中:

dependencies {
compile("org.springframework.boot:spring-boot-starter-web")
compile("org.springframework.cloud:spring-cloud-starter-hystrix-dashboard:1.0.0.RC2")
compile("org.springframework.cloud:spring-cloud-starter-hystrix:1.0.0.RC2")
}

我使用上述库将一个应用程序部署为 hystrix 仪表板,并且@EnableHystrixDashboard

然后我部署了另一个带有注释的应用程序@EnableHystrix

我添加了一个组件,该组件具有我通过控制器调用的命令,只是为了测试一下:

@HystrixCommand(fallbackMethod = "onFailedToSayHello")
public String sayHello(Map<String, String> parameters) {
    if (parameters.get("fail") != null && parameters.get("fail").equals("yes")) {
        throw new RuntimeException("I failed because you told me to");
    }
    return "Hello";
}

private String onFailedToSayHello(Map<String, String> parameters) {
    return "Bye";
}

hystrix 应用程序运行良好。当我点击 URL 时,我看到了流,我在这里输入了一个要点的输出。

我只是看到一遍又一遍地重复。

我的仪表板已启动并正在运行,当我输入正在运行的 hystrix 示例应用程序的 URL 时,我会看到一个加载屏幕:

hystrix 仪表板加载屏幕

然后,当我再次检查我的 hystrix 应用程序时,我看到了:

λ curl http://myappurl/hystrix.stream
{"timestamp":1423748238280,"status":503,"error":"Service      Unavailable","message":"MaxConcurrentConnections reached: 5","path":"/hystrix.stream"}

我不知道从这里去哪里。我尝试部署 hystrix 仪表板战争,而不是自己构建它,我从这里下载但得到了相同的结果。

我还注意到浏览器控制台中的一些 JavaScript 错误输出,我将它们放在这里以防万一。

在服务器日志中,我一遍又一遍地看到这一点:

2015-02-15 20:03:55.324 信息 9360 --- [nio-8080-exec-9] ashboardConfiguration$ProxyStreamServlet:

代理打开连接到:http://myappurl/hystrix.stream

我现在要尝试让涡轮机运行,看看使用它是否能神奇地修复问题。以为我也会在这里发帖,尽管有人可能会根据我迄今为止所做的事情发现我的错误。

编辑:我没有提到的重要一点是我在 PCF 上部署了应用程序和仪表板。这似乎很重要,因为当我在本地部署时不会发生此问题。仍然不知道是什么原因造成的。

4

2 回答 2

1

如果您从最新源构建 hystrix-dashboard或使用最新发布的战争(撰写本文时 3 月 27 日版本 1.4.3),问题就会消失。

于 2015-04-02T15:23:19.950 回答
0

有几件事可能会导致 MaxConcurrentConnections,其中之一是应用程序没有生成任何度量数据。servlet (Hystrix.stream servlets) 将继续循环等待数据,然后它将消耗所有连接。Hystrix github wiki 上有很好的讨论。例如: 如果没有指标 #85,hystrix.stream 保持连接打开

于 2016-03-17T16:41:37.053 回答