Spring 启动部署在 PCF 上的 Hystrix 仪表板未显示指标
Hystrix Dashboard with Spring Boot Deployed On PCF not showing Metrics
我使用 Spring 启动和 spring 云启动器 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 时,我看到了流,我将其输出放入要点 here.
我只是看到一遍又一遍地重复。
我的仪表板已启动 运行,当我进入我的 运行 hystrix 示例应用程序的 URL 时,我看到一个加载屏幕:
然后,当我再次检查我的 hystrix 应用时,我看到了这个:
λ curl http://myappurl/hystrix.stream
{"timestamp":1423748238280,"status":503,"error":"Service Unavailable","message":"MaxConcurrentConnections reached: 5","path":"/hystrix.stream"}
我不知道从这里到哪里去。我尝试部署 hystrix 仪表板 war 而不是自己构建它,这是我从 here 下载的,但得到了相同的结果。
我还注意到浏览器控制台中有一些 JavaScript 错误输出,我把它们放在 here 以防它们有用。
在服务器日志中我看到这一遍又一遍地重复:
2015-02-15 20:03:55.324 INFO 9360 --- [nio-8080-exec-9]
ashboardConfiguration$ProxyStreamServlet :
Proxy opening connection to: http://myappurl/hystrix.stream
我现在要尝试获取 turbine 运行,看看使用它是否能以某种方式神奇地修复问题。我想我也会 post 在这里,尽管有人可以根据我到目前为止所做的事情发现我的错误。
编辑:
我没有提到的重要一点是,我在 PCF 上同时部署了应用程序和仪表板。这似乎很重要,因为当我在本地部署时不会发生此问题。仍然不知道是什么原因造成的。
如果您从最新的 source, or use the most recently released war(撰写本文时 3 月 27 日的版本 1.4.3)构建 hystrix-dashboard,问题就会消失。
有几件事可能会导致 MaxConcurrentConnections,其中之一是应用程序没有生成任何指标数据。 servlets (Hystrix.stream servlets) 会一直循环等待数据,然后它会消耗掉所有的连接。 Hystrix github wiki 上有很好的讨论。例如:
hystrix.stream holds connection open if no metrics #85
我使用 Spring 启动和 spring 云启动器 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 时,我看到了流,我将其输出放入要点 here.
我只是看到一遍又一遍地重复。
我的仪表板已启动 运行,当我进入我的 运行 hystrix 示例应用程序的 URL 时,我看到一个加载屏幕:
然后,当我再次检查我的 hystrix 应用时,我看到了这个:
λ curl http://myappurl/hystrix.stream
{"timestamp":1423748238280,"status":503,"error":"Service Unavailable","message":"MaxConcurrentConnections reached: 5","path":"/hystrix.stream"}
我不知道从这里到哪里去。我尝试部署 hystrix 仪表板 war 而不是自己构建它,这是我从 here 下载的,但得到了相同的结果。
我还注意到浏览器控制台中有一些 JavaScript 错误输出,我把它们放在 here 以防它们有用。
在服务器日志中我看到这一遍又一遍地重复:
2015-02-15 20:03:55.324 INFO 9360 --- [nio-8080-exec-9] ashboardConfiguration$ProxyStreamServlet :
Proxy opening connection to: http://myappurl/hystrix.stream
我现在要尝试获取 turbine 运行,看看使用它是否能以某种方式神奇地修复问题。我想我也会 post 在这里,尽管有人可以根据我到目前为止所做的事情发现我的错误。
编辑: 我没有提到的重要一点是,我在 PCF 上同时部署了应用程序和仪表板。这似乎很重要,因为当我在本地部署时不会发生此问题。仍然不知道是什么原因造成的。
如果您从最新的 source, or use the most recently released war(撰写本文时 3 月 27 日的版本 1.4.3)构建 hystrix-dashboard,问题就会消失。
有几件事可能会导致 MaxConcurrentConnections,其中之一是应用程序没有生成任何指标数据。 servlets (Hystrix.stream servlets) 会一直循环等待数据,然后它会消耗掉所有的连接。 Hystrix github wiki 上有很好的讨论。例如: hystrix.stream holds connection open if no metrics #85