spring cloud之Turbine断路器聚合监控(十二)
一、博客背景
上一章讲解了针对一个微服务的断路器监控,但是微服务通常会是多个实例组成的一个集群。 倘若集群里的实例比较多,难道要挨个挨个去监控这些实例吗? 何况有时候,根据集群的需要,会动态增加或者减少实例,监控起来就更麻烦了。
所以为了方便监控集群里的多个实例,springCloud 提供了一个 turbine 项目,它的作用是把一个集群里的多个实例汇聚在一个 turbine里,这个然后再在 断路器监控里查看这个 turbine, 这样就能够在集群层面进行监控啦。
二、创建集群监控子模块项目
三、修改pom文件
引入以下依赖
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</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-actuator</artifactId>
</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.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.1.0</version>
</dependency>
</dependencies>
三、新建启动类
启动类上加上@EnableTurbine和@EnableHystrixDashboard两个注解
package tp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.netflix.turbine.EnableTurbine;
/**
* @Package: tp
* @ClassName: TurbineServerApplication
* @Author: tanp
* @Description: ${description}
* @Date: 2020/7/29 17:47
*/
@SpringBootApplication
@EnableTurbine
@EnableHystrixDashboard
public class TurbineServerApplication {
public static void main(String[] args) {
SpringApplication.run(TurbineServerApplication.class,args);
}
}
四、新建application.yml文件
spring:
application:
name: turbin
server:
port: 8682
eureka:
client:
service-url:
defaultZone: http://localhost:8689/eureka/
# 熔断器turbine
turbine:
aggregator:
cluster-config: default
cluster-name-expression: new String("default")
app-config: feign-server, feign-server-2
#1.turbine.aggregator.clusterConfig :指定聚合哪些集群,多个使用”,”分割,默认为default。
#2.turbine.appConfig :#配置Eureka中的serviceId列表,表明监控哪些服务
#3. turbine.clusterNameExpression :
# clusterNameExpression指定集群名称,默认表达式appName;此时:turbine.aggregator.clusterConfig需要配置想要监控的应用名称;
# 当clusterNameExpression: default时,turbine.aggregator.clusterConfig可以不写,因为默认就是default;
# 当clusterNameExpression: metadata[‘cluster’]时,假设想要监控的应用配置了eureka.instance.metadata-map.cluster: ABC,则需要配置,同时turbine.aggregator.clusterConfig: ABC
五、新建访问服务的工具类
新建一个工具类不停的访问feignserver服务
package tp;
import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.http.HttpUtil;
/**
* @Package: tp
* @ClassName: Util
* @Author: tanp
* @Description: 工具类不断请求fegin server服务
* @Date: 2020/7/30 9:08
*/
public class Util {
public static void main(String[] args) {
while(true) {
ThreadUtil.sleep(1000);
access(8683);
access(8685);
}
}
public static void access(int port) {
try {
String html= HttpUtil.get(String.format("http://127.0.0.1:%d/getdatas",port));
System.out.printf("%d 地址的视图服务访问成功,返回大小是 %d%n" ,port, html.length());
}
catch(Exception e) {
System.err.printf("%d 地址的视图服务无法访问%n",port);
}
}
}
六、新建feignserver2子模块
新建一个feignserver子模块,用作 turbine监控所需
代码,pom文件,配置文件全部拷贝feignserver的,只需配置文件中的端口号为8683,服务名改为feign-server-2,用来作为断路器监控所监控的第二个服务
七、启动项目
启动 turbine服务,访问 页面 http://localhost:8682/hystrix,得到
然后输入:http://localhost:8682/turbine.stream
就可以得到监控列表了
这时就会有人觉得奇怪,我不是监控了两个feignserver服务吗,为什么页面上只有一个展示,原因是监控不同的服务熔断,首先得是不同的rpc调用,也就是消费者的熔断函数要是两个不同的,或者,消费者去调用的是两个不同的服务提供者!这样才会有多个监控表。
八、新建dataserver3子模块
新建dataserver3子模块,代码,yml文件,pom文件全部拷贝dataserver的,只需修改yml文件中的端口号为8681,服务名为data-server-2,该服务用来作为feignserver2调用的服务端,以此满足新的消费目标
九、修改feignserver2的代码
@Service
@FeignClient(value = "DATA-SERVER-2",fallback = ClientFeignHystrix.class)
public interface FeignClientServer {
@GetMapping("/datas")
public List<String> getDatas2();
}
FeignClientServer 中修改@FeignClient注解的values值为data-server-2,以此满足来调用的是两个不同的服务提供者
修改方法名为getDatas2()来满足消费者的熔断函数不同,所以对于调用的controller,ClientFeignHystrix里的方法也需更方法名为getDatas2()
十、访问页面结果
启动dataserver2服务,重启feignserver, turbineserver服务,再次访问页面http://localhost:8682/hystrix,输入http://localhost:8682/turbine.stream ,可得到
可以看到,在监控面板已经有两个feignserserver服务和dataserver服务了,这样就可以实现断路器的聚合监控
十一、总结
从第一章博客学到现在,spring cloud的一些常用组件的基本使用已经了解的差不多了,下面粘贴本系列博客的源代码地址
https://download.csdn.net/download/bird_tp/12673045
本文地址:https://blog.csdn.net/bird_tp/article/details/107671174