我的GitHub地址:https://github.com/leebingbin/java
在使用Spring Cloud的过程当中,不免会遇到一些问题。因此对Spring Cloud的经常使用问题作一些总结。git
在某些版本的Spring Cloud (例如 Brixton SR5)中,Turbine 会发生该问题。该问题的直接观体现是:
使用 Turbine 聚合多个微服务,但在 Hystrix Dashboard 上只能看到部分微服务的监控数据。github
现象描述:spring
好比 Turbine 配置以下:架构
turbine: appConfig:movieticketing-consumer-movie,movieticketing-consumer-movie-feign-hystrix-fallback-stream clusterNameExpression:"'default'"
Turbine 理应聚合 movieticketing-consumer-movie,movieticketing-consumer-movie-feign-hystrix-fallback-stream 这两个微服务的监控数据,然而打开 Hystrix Dashboard 时,会发现Dashboard 上只显示部分微服务的监控数据。app
解决方案:微服务
当 Turbine 聚合的微服务部署在同一台主机上时,就会出现该问题。spa
解决方案一:.net
为各个微服务配置不一样的 hostname ,并将 preferIpAddress 设为 false 或者不设置。code
eureka: client: serviceUrl: defaultZone:http://discovery:8761/eureka/ instance: hostname:ribbon # 配置hostname
解决方案二:
设置turbine.combine-host-port = true
turbine: appConfig:movieticketing-consumer-movie,movieticketing-consumer-movie-feign-hystrix-fallback-stream clusterNameExpression:"'default'" combine-host-port:true
方法三:
升级 Spring Cloud 到 Camden 或更新版本。固然,也可单独升级 Spring Cloud Netflix 到 1.2.0以上最新稳定版(通常不建议单独升级 Spring Cloud Netflix, 由于可能会跟 Spring Cloud 其余组件冲突)。
这是由于老版本中的 turbine.combine-host-port 默认值是 false 。Spring Cloud 已经意识到该问题,故在新的版本中将该属性的默认值设为 true 。该解决方案和方法二本质是一致的。
Tips: 相关源码位置
org.springframework.cloud.netflix.turbine.TurbineProperties.combine-HostPort org.springframework.cloud.netflix.turbine.CommonsInstanceDiscovery.getInstance(String, String, String, Boolean)
· 关于“Eureka常见问题”能够参考,我以前的文章《微服务开发架构——Spring Cloud常见问题与总结<一>Eureka常见问题》:http://www.javashuo.com/article/p-fbmbfvua-w.html ;
· 关于“Hystrix/Feign 整合Hystrix后首次请求失败”能够参考,我以前的文章《微服务开发架构——Spring Cloud常见问题与总结<二>Hystrix/Feign 整合Hystrix后首次请求失败》:http://www.javashuo.com/article/p-mkoycawh-en.html;
本文为博主原创文章,转载请注明出处!