Hystrix Dashboard的turbine集成
本文中示例代码的引用版本:
org.springframework.boot 版本 :2.1.0.RELEASE
org.springframework.cloud 版本:Greenwich.M1
示例代码-码云 https://gitee.com/sharps/springcloud
在复杂的分布式系统中,相同服务的节点经常需要部署上百甚至上千个,很多时候,运维人员希望能够把相同服务的节点状态以一个整体集群的形式展现出来,这样可以更好的把握整个系统的状态。 为此,Netflix提供了一个开源项目(Turbine)来提供把多个hystrix.stream的内容聚合为一个数据源供Dashboard展示。
第一步、新建0406spring-cloud-hystrix-dashboard-turbine项目
1、添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
2、配置文件
spring.application.name=hystrix-dashboard-turbine
server.port=8001
turbine.appConfig=node01,node02
turbine.aggregator.clusterConfig= default
turbine.clusterNameExpression= new String("default")
spring.security.user.name=user
spring.security.user.password=123456
eureka.client.serviceUrl.defaultZone=http://user:123456@localhost:8000/eureka/
turbine.instanceUrlSuffix=hystrix.stream
- turbine.appConfig :配置Eureka中的serviceId列表,表明监控哪些服务
- turbine.aggregator.clusterConfig
:指定聚合哪些集群,多个使用”,”分割,默认为default。可使用http://…/turbine.stream?cluster={clusterConfig之一}访问 - turbine.clusterNameExpression :
A. clusterNameExpression指定集群名称,默认表达式appName;此时:turbine.aggregator.clusterConfig需要配置想要监控的应用名称;
B. 当clusterNameExpression: default时,turbine.aggregator.clusterConfig可以不写,因为默认就是default;
C. 当clusterNameExpression:metadata[‘cluster’]时,假设想要监控的应用配置了eureka.instance.metadata-map.cluster: ABC,则需要配置,同时turbine.aggregator.clusterConfig: ABC
3、启动类
启动类添加@EnableTurbine,激活对Turbine的支持
@SpringBootApplication
@EnableHystrixDashboard
@EnableTurbine
public class TurbineApplication {
public static void main(String[] args) {
SpringApplication.run(TurbineApplication.class, args);
}
}
到此Turbine(0406spring-cloud-hystrix-dashboard-turbin)配置完成
第二步、新建0404spring-cloud-consumer-node1和0405spring-cloud-consumer-node2
在示例项目0303spring-cloud-consumer-hystrix基础上修改为两个服务的调用者0404spring-cloud-consumer-node1和0405spring-cloud-consumer-node2
1、添加依赖
0404spring-cloud-consumer-node1和0405spring-cloud-consumer-node2添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
2、配置文件
0404spring-cloud-consumer-node1项目改动如下:
application.properties文件内容
spring.application.name=node01
server.port=9991
spring.security.basic.enabled=true
spring.security.user.name=user
spring.security.user.password=123456
feign.hystrix.enabled=true
eureka.client.serviceUrl.defaultZone=http://user:123456@localhost:8000/eureka/
0405spring-cloud-consumer-node2项目改动如下:
application.properties文件内容:
spring.application.name=node02
server.port=9992
spring.security.basic.enabled=true
spring.security.user.name=user
spring.security.user.password=123456
eureka.client.serviceUrl.defaultZone=http://user:123456@localhost:8000/eureka/
feign.hystrix.enabled=true
3、启动类
0404spring-cloud-consumer-node1和0405spring-cloud-consumer-node2项目改动如下:
SpringCloudConsumerApplication启动类修改
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableCircuitBreaker
@EnableHystrixDashboard
public class SpringCloudConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudConsumerApplication.class, args);
}
@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;
}
}
0405spring-cloud-consumer-node2项目改动如下:
HelloRemote类修改:
@FeignClient(name= "spring-cloud-producer2", fallback = HelloRemoteHystrix.class)
public interface HelloRemote {
@RequestMapping(value = "/hello")
public String hello2(@RequestParam(value = "name") String name);
}
对应的HelloRemoteHystrix和ConsumerController类跟随修改,具体查看代码
第三步、测试
依次启动0401spring-cloud-eureka、0403spring-cloud-producer、0404spring-cloud-consumer-node1、0405spring-cloud-consumer-node1、0406spring-cloud-hystrix-dashboard-turbine项目
1、服务注册中心 0401spring-cloud-eureka http://localhost:8000/
打开eureka后台可以看到注册了四个服务:
2、服务提供者 0403spring-cloud-producer http://localhost:9001/hello?name=llx
3、服务消费者
0404spring-cloud-consumer-node1
http://localhost:9991/hello/llx
http://localhost:9991/hystrix.stream
0405spring-cloud-consumer-node2
http://localhost:9992/hello/llx
http://localhost:9992/hystrix.stream
4、hystrix-dashboard-turbine服务
0406spring-cloud-hystrix-dashboard-turbine
http://localhost:8001/turbine.stream
并且会不断刷新以获取实时的监控数据,说明和单个的监控类似,返回监控项目的信息。进行图形化监控查看,输入:http://localhost:8001/hystrix,返回酷酷的小熊界面,输入: http://localhost:8001/turbine.stream,然后点击 Monitor Stream ,可以看到出现了俩个监控列表