最近在使用Spring cloud时发现一个bug,就是使用Hystrix时,单点监控在页面显示正常,而集群监控显示一直loading,最后显示Unable to connect to Command Metric Stream.总结了下一些可能原因,也许对你们有用:
- app config 和被监控服务的名称要一致,被监控服务有多个时要用逗号隔开,示例如下:
appConfig: demo-service ### 配置Eureka中的serviceId列表,表明监控哪些服务
- 如果有访问被监控服务服务的程序,看看程序是否已经打开
- 检查yml文件空格,以及
@EnableTurbine
标签有没有写在TurbineApplication上 - 据说,嘻嘻就是据说,这个我验证过,好像没啥用,不过看到网上好多说有用的,一并写了(这个东西写了后面好像有用,而且不影响,所以能配还是配上)。由于Springboot2.0的原因,要在turbine的application.yml设置
instanceUrlSuffix.APPCLUSTER: /hystrix.stream
。 - 在TurbineApplication下增加如下配置:
@Bean
public ServletRegistrationBean getServlet() {
HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}
最后分享一个解决这个bug中查到的示例配置吧,希望能对你们有所启发!
Demo application.yml:
management:
security:
enabled: false
port: 8081
hystrix:
enabled: true
Demo bootstrap.yml:
spring:
application:
name: demo-service
cloud:
config:
discovery:
enabled: true
serviceId: config-service
eureka:
client:
register-with-eureka: false
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
hostname: ${APPLICATION_DOMAIN:localhost}
nonSecurePort: 8090
metadataMap:
management.port: 8082
Hystrix Dashboard & Turbine bootstrap.yml:
...
turbine:
aggregator:
clusterConfig: DEMO-SERVICE
appConfig: demo-service
如果还有什么问题可以发在评论区大家一起讨论