上一篇内容学习了Hystrix Dashboard查看熔断信息,通常情况下,查看单个的Hystrix熔断信息意义不大,需要把信息聚合到一起,这个时候就需要用到Turbine了,本篇学习内容,基于上一篇学习代码,我们在添加一个Service-Consumer项目,具体内容可以下载工程代码,分别命名为Service-Consumer-A和Service-Consumer-B。在建一个Service-Turbine工程,主要用来显示聚合监控数据。
首先在新建模块中引入POM依赖:
-
<?xml version="1.0" encoding="UTF-8"?>
-
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-
xsi:schemaLocation=
"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
-
<modelVersion>4.0.0
</modelVersion>
-
<parent>
-
<groupId>org.dothwinds
</groupId>
-
<artifactId>spring-cloud-study
</artifactId>
-
<version>1.0.0
</version>
-
</parent>
-
<groupId>org.dothwinds
</groupId>
-
<artifactId>spring-cloud-study-service-turbine
</artifactId>
-
<version>1.0.0
</version>
-
<name>spring-cloud-study-service-turbine
</name>
-
-
<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.cloud
</groupId>
-
<artifactId>spring-cloud-starter-openfeign
</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.boot
</groupId>
-
<artifactId>spring-boot-starter-actuator
</artifactId>
-
</dependency>
-
-
<dependency>
-
<groupId>org.springframework.cloud
</groupId>
-
<artifactId>spring-cloud-starter-netflix-turbine
</artifactId>
-
</dependency>
-
</dependencies>
-
-
</project>
然后在项目启动类上,加入注解@EnableTurbine
-
package org.dothwinds.serviceconsumer;
-
-
import org.springframework.boot.SpringApplication;
-
import org.springframework.boot.autoconfigure.SpringBootApplication;
-
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
-
import org.springframework.cloud.netflix.hystrix.EnableHystrix;
-
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
-
import org.springframework.cloud.netflix.turbine.EnableTurbine;
-
import org.springframework.cloud.openfeign.EnableFeignClients;
-
-
@SpringBootApplication
-
@EnableEurekaClient
-
@EnableFeignClients
-
@EnableHystrix
-
@EnableHystrixDashboard
-
@EnableTurbine
-
public
class SpringCloudStudyServiceConsumerApplication {
-
-
public static void main(String[] args) {
-
SpringApplication.run(SpringCloudStudyServiceConsumerApplication.class, args);
-
}
-
-
}
然后我们来修改配置文件application.yml文件,加入turbine的配置内容
-
server:
-
port:
11000
-
spring:
-
application:
-
name: service-turbine
#应用名称,会显示在eureka server中
-
-
eureka:
-
client:
-
service-url:
-
defaultZone: http:
//localhost:8100/eureka/ #eureka server地址
-
-
management:
-
endpoints:
-
web:
-
exposure:
-
include:
"*"
-
cors:
-
allowed-origins:
"*"
-
allowed-methods:
"*"
-
-
#turbine配置信息
-
turbine:
-
#需要聚合监控的应用名称,多个以逗号隔开
-
app-config: service-cosumer-a,service-cosumer-b
-
aggregator:
-
#聚合哪些集群,默认为 default
-
clusterConfig:
default
-
#集群名称为 default
-
clusterNameExpression:
new String(
"default")
-
分别启动Eureka和两个Service-Consumer服务,还有Service-Turbine的服务:
接下来进入Turbine的监控界面,http://localhost:11000/turbine.stream返回如下信息:
分别访问Service-Consumer的地址:http://localhost:10001/testLoadBalance和http://localhost:10002/testLoadBalance,这两个地址多刷新几次,然后打开http://localhost:11000/hystrix,输入http://localhost:11000/turbine.stream,点击Monitor Stream按钮,成功返回:
遇到的问题:
启动Service-Turbine服务之后,访问/actuator/hystrix.stream报了404错误,返回类似的如下错误信息
[{"timestamp":"2020-03-26T13:02:10.935+0000","status":404,"error":"Not Found","message":"No message available","path":"/actuator/hystrix.stream"}]
这个时候我们需要把监控的服务都在启动类中加上下面的代码,否则默认是找不到的(原因在此:https://blog.csdn.net/ddxd0406/article/details/79643059)
-
@Bean
-
public ServletRegistrationBean getServlet() {
-
HystrixMetricsStreamServlet streamServlet =
new HystrixMetricsStreamServlet();
-
ServletRegistrationBean registrationBean =
new ServletRegistrationBean(streamServlet);
-
registrationBean.setLoadOnStartup(
1);
-
registrationBean.addUrlMappings(
"/actuator/hystrix.stream");
-
registrationBean.setName(
"HystrixMetricsStreamServlet");
-
return registrationBean;
-
}
参考资料:https://cloud.spring.io/spring-cloud-static/Greenwich.SR5/single/spring-cloud.html
代码:https://gitee.com/dothwinds/Spring-Cloud-Study/tree/master/spring-cloud-study-turbine
转载:https://blog.csdn.net/Dothwinds/article/details/105112152