这几天空闲在家就拿来整合下,熔断是很容易弄出来,但是这个dashboard还是遇到很大的麻烦,所以记录下。
Hystrix 是一个服务监控工具,由于网上整合了大多数都是1.x版本的,整合结果如下:
应用说明
spring boot 2.1.4.RELEASE
spring cloud 2.1.x
直接上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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springclouddemo</artifactId>
<groupId>com.rain.study</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-cloud-hystrix</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<!-- web 项目应该放在开头 会自动加载-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.1.1.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--识别服务 的发现自动注册在这个包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpmime</artifactId>
<version>4.3.2</version>
</dependency>
<!--实现熔断添加的包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<!--hystrix 仪表盘包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
<version>2.1.1.RELEASE</version>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-archaius</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
启动文件
@EnableDiscoveryClient
@EnableEurekaClient
@SpringBootApplication
@EnableHystrix
@EnableHystrixDashboard
@EnableCircuitBreaker
public class SpringCloudHystrixApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudHystrixApplication.class,
args);
}
@Bean(name="remoteRestTemplate")
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
@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;
}
}
值得说明的是 ServletRegistrationBean getServlet() 这个必须得加不加就会出问题,感谢前辈的总结。还有一个要注意的地方就是dashboard的访问问题,网上有说 http://localhost:9005/actuator/hystrix.stream 这个地址和 http://localhost:9005/hystrix(9005是我自己的端口),其实刚开始也没搞明白是什么鬼情况:
访问 http://localhost:9005/actuator/hystrix.stream 出现一会json 我还纳闷这什么意思,为啥和别人给的那个不一样,估计很多人也和我差不多会纠结这个问题,直到我看见另外一篇 博客(https://blog.csdn.net/xiaoluo033/article/details/80952786)恍然大悟:
访问Dashboard的步骤如下:
第一步:打开 http://localhost:9005/hystrix
第二步: 在监控地址栏中输入 http://localhost:9005/actuator/hystrix.stream 点击 Monitor Stream 就好了,至此全部完成