我已按照Spring Cloud Netflix 的指南配置 Turbine。在两个微服务中启用 Hystrix 后,我已经验证 /hystrix.stream 端点生成正确的输出。
现在在一个 hystrix 仪表板项目中,我已经配置了 Turbine 以获取所有服务的聚合结果。然而,我得到的只是一系列的:
: ping
data: {"reportingHostsLast10Seconds":0,"name":"meta","type":"meta","timestamp":1448552456486}
这是我的配置:
HystrixDashboard + Turbine 应用:
@EnableHystrixDashboard
@EnableTurbine
@SpringBootApplication
public class HystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(HystrixDashboardApplication.class, args);
}
}
HystrixDashboard + Turbine application.yml:
spring:
application:
name: hystrix-dashboard
server:
port: 10000
turbine:
appConfig: random-story-microservice,storyteller-api
instanceUrlSuffix: /hystrix.stream
logging:
level:
com.netflix.turbine: 'TRACE'
更新
按照 kreel 的指示,我以这种方式配置了 Turbine:
turbine:
appConfig: random-story-microservice,storyteller-api
instanceUrlSuffix: /hystrix.stream
clusterNameExpression: new String("default")
它不再因异常而失败,在日志中我看到 Turbine 找到了两个候选主机/微服务:
[ Timer-0] c.n.t.discovery.InstanceObservable : Retrieved hosts from InstanceDiscovery: 2
然而,其中只有一个最终被注册。仅在InstanceObservable.run()
其中一个主机中添加,因为它们具有相同的哈希码,因此在添加到 newState.hostsUp 时它们被认为是相同的。哈希码是根据com.netflix.turbine.discovery.Instance
主机名(两种情况下的“myhost”)和集群(“默认”)计算的:
// set the current state
for(Instance host: newList) {
if(host.isUp()) {
newState.hostsUp.add(host);
} else {
newState.hostsDown.add(host);
}
}
当同一台主机提供两种不同的微服务时,我们该怎么办?在这种情况下,仅注册了第一个实例。