1、啟動基礎工程
1.1、啟動【服務中心】集群,工程名稱:springcloud-eureka-server
1.2、啟動【服務提供者】集群,工程名稱:springcloud-eureka-client
1.3、啟動【服務消費者】,工程名稱:springcloud-eureka-ribbon
1.4、啟動【服務消費者】,工程名稱:springcloud-eureka-feign
2、創建【斷路器指標看板】,即 Hystrix Dashboard
2.1、新建 Spring Boot 工程,工程名稱:springcloud-eureka-hystrix-dashboard
2.2、工程 pom.xml 文件添加如下依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</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-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
2.3、在工程啟動類中,添加注解 @EnableDiscoveryClient,@EnableHystrixDashboard
package com.miniooc.eurekahystrixdashboard;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
/**
* EurekaHystrixDashboardApplication
*
* @author 宋陸
* @version 1.0.0
*/
@EnableHystrixDashboard // 啟用 HystrixDashboard 斷路器看板 相關配置
@EnableDiscoveryClient // 啟用 Eureka 服務發現 相關配置
@SpringBootApplication
public class EurekaHystrixDashboardApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaHystrixDashboardApplication.class, args);
}
}
2.4、新建工程配置文件 application.yml ,配置內容:
server:
port: 52630
spring:
application:
name: eureka-hystrix-dashboard
eureka:
instance:
hostname: localhost
# 表示eureka client間隔多久去拉取服務注冊信息,默認為30秒,如果要迅速獲取服務注冊狀態,可以縮小該值
lease-renewal-interval-in-seconds: 5
# 表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超時時間,在這個時間內若沒收到下一次心跳,則將移除該instance。
# 默認為90秒
# 如果該值太大,則很可能將流量轉發過去的時候,該instance已經不存活了。
# 如果該值設置太小了,則instance則很可能因為臨時的網絡抖動而被摘除掉。
# 該值至少應該大於 leaseRenewalIntervalInSeconds
lease-expiration-duration-in-seconds: 10
client:
serviceUrl:
defaultZone: http://localhost:9527/eureka/,http://localhost:9528/eureka/,http://localhost:9529/eureka/
2.5、啟動【斷路器指標看板】工程
2.6、打開瀏覽器,訪問 http://localhost:52630/hystrix

2.7、監控地址輸入 http://localhost:52610/hystrix.stream 來監控 springcloud-eureka-ribbon 服務,點擊【Monitor Stream】按鈕,開啟斷路器指標看板

報了一個紅色提示,Unable to connect to Command Metric Stream.這是因為我們開啟監控的斷路器流 Hystrix Stream: http://localhost:52610/hystrix.stream。這個路徑,不是springboot工程默認路徑,也不是hystrix默認路徑。
解決方案:修改【服務消費者】工程,注冊斷路器指標流Servlet
2.8、修改【服務消費者】工程,工程名稱:springcloud-eureka-ribbon,修改EurekaRibbonConfig類,注冊斷路器指標流Servlet
package com.miniooc.eurekaribbon.config;
import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* EurekaRibbonConfig
* 應用配置類,初始化 Bean和配置信息
*
* @author 宋陸
* @version 1.0.0
*/
@Configuration
public class EurekaRibbonConfig {
@Bean // 初始化 Bean
@LoadBalanced // 實現負載均衡
public RestTemplate restTemplate() {
return new RestTemplate();
}
@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;
}
}
2.9、重啟【服務消費者】springcloud-eureka-ribbon 服務。刷新【斷路器指標看板】頁面

紅框處 Loading... 狀態,是因為重啟【服務消費者】后,沒有任何請求,所以,也就沒有任何數據流產生。監控頁面就處於加載中。只要我們請求一下 http://localhost:52610/ribbonInfo,就可以看到數據指標了。

2.10、新開瀏覽器窗口,訪問 http://localhost:52630/hystrix
2.11、監控地址輸入 http://localhost:52620/hystrix.stream 來監控 springcloud-eureka-feign 服務,點擊【Monitor Stream】按鈕,開啟斷路器指標看板
依舊是同樣的問題,Unable to connect to Command Metric Stream。
解決方案:修改【服務消費者】工程,注冊斷路器指標流Servlet
2.12、修改【服務消費者】工程,工程名稱:springcloud-eureka-feign,新增EurekaFeignConfig類,注冊斷路器指標流Servlet
package com.miniooc.eurekafeign.config;
import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
/**
* EurekaFeignConfig
* 應用配置類,初始化 Bean和配置信息
*
* @author 宋陸
* @version 1.0.0
*/
@Configuration
public class EurekaFeignConfig {
@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;
}
}
2.13、重啟【服務消費者】springcloud-eureka-feign 服務。刷新【斷路器指標看板】頁面
依舊是 Loading... 問題,只要我們請求一下 http://localhost:52610/feignInfo,就可以看到數據指標了。

