SpringCloud學習系列之三----- 斷路器(Hystrix)和斷路器監控(Dashboard)

前言

本篇主要介紹的是SpringCloud中的斷路器(Hystrix)和斷路器指標看板(Dashboard)的相關使用知識。html

SpringCloud Hystrix

Hystrix 介紹

Netflix建立了一個名爲Hystrix的庫,它實現了斷路器模式。主要的目的是爲了解決服務雪崩效應的一個組件,是保護服務高可用的最後一道防線。git

開發準備

開發環境github

  • JDK:1.8
  • SpringBoot:2.1.1.RELEASE
  • SpringCloud:Finchley

注:不必定非要用上述的版本,能夠根據狀況進行相應的調整。須要注意的是SpringBoot2.x之後,jdk的版本必須是1.8以上!web

確認了開發環境以後,咱們再來添加相關的pom依賴。spring

<dependencies>
	<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.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
複製代碼

注: 實際上這裏是不須要Hystrix依賴的,Fegin已經添加了Hystrix依賴。瀏覽器

SpringCloud Hystrix 示例

因爲Hystrix機制是在微服務項目上進行的,而且Fegin中包含了該機制。因此這裏咱們能夠把以前的springcloud-feign的項目進行簡單的改造就好了。springboot

服務端

首先是服務端這塊,爲了進行區分,建立一個springcloud-hystrix-eureka的項目,用於作註冊中心。 代碼和配置和以前的基本同樣。 application.properties配置信息:bash

配置信息:app

spring.application.name=springcloud-hystrix-eureka-server
server.port=8002
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:8002/eureka/
複製代碼

配置說明:負載均衡

  • spring.application.name: 這個是指定服務名稱。
  • server.port:服務指定的端口。
  • eureka.client.register-with-eureka:表示是否將本身註冊到Eureka Server,默認是true。
  • eureka.client.fetch-registry:表示是否從Eureka Server獲取註冊信息,默認爲true。
  • eureka.client.serviceUrl.defaultZone: 這個是設置與Eureka Server交互的地址,客戶端的查詢服務和註冊服務都須要依賴這個地址。

服務端這邊只須要在SpringBoot啓動類添加@EnableEurekaServer註解就能夠了,該註解表示此服務是一個服務註冊中心服務。

代碼示例:

@EnableEurekaServer
	@SpringBootApplication
	public class HystrixEurekaApplication {
	  public static void main(String[] args) {
	      SpringApplication.run(HystrixEurekaApplication.class, args);
	      System.out.println("hystrix註冊中心服務啓動...");
	  }
	}


複製代碼

客戶端

這裏咱們把以前的springcloud-fegin-consumer項目稍微改造下,項目名改成springcloud-hystrix-consumer。而後在application.properties配置文件新增以下配置, feign.hystrix.enabled配置表示是否啓用熔斷機制。

feign.hystrix.enabled=true

複製代碼

增長了配置以後,咱們在來把以前的fegin進行定義轉發服務的@FeignClient註解進行添加一個回調方法fallback。代碼改造後的實現以下:

@FeignClient(name= "springcloud-hystrix-consumer2",fallback = HelloRemoteHystrix.class)
	public interface HelloRemote {
	    @RequestMapping(value = "/hello")
	    public String hello(@RequestParam(value = "name") String name);
	}
	
複製代碼

最後新增一個回調類,用於處理斷路的狀況。這裏咱們就簡單的處理下,返回錯誤信息便可!

代碼示例:

@Component
	public class HelloRemoteHystrix implements HelloRemote{
	
	    @Override
	    public String hello(@RequestParam(value = "name") String name) {
	        return name+", 請求另外一個服務失敗!";
	    }
	}

複製代碼

其他的代碼就不展現了,和以前的springcloud-fegin-consumer項目中的一致,詳細的能夠在這篇博文SpringCloud學習系列之二 ----- 服務消費者(Feign)和負載均衡(Ribbon)進行查看。

而後在把以前的springcloud-feign-consumer2進行簡單的改造下,項目名稱改成springcloud-hystrix-consumer2。而後更改下配置的端口。

功能測試

完成如上的工程開發以後,咱們依次啓動服務端和客戶端的springcloud-hystrix-eurekaspringcloud-hystrix-consumerspringcloud-hystrix-consumer2這三個程序,而後在瀏覽器界面輸入:http://localhost:8002/,便可查看註冊中心的信息。

首先在瀏覽器輸入:

http://localhost:9004/hello/pancm

控制檯打印:

接受到請求參數:pancm,進行轉發到其餘服務
複製代碼

瀏覽器返回:

pancm,Hello World
複製代碼

而後再輸入:

http://localhost:9005/hello?name=pancm

瀏覽器返回:

pancm,Hello World
複製代碼

說明程序運行正常,fegin的調用也ok。這時咱們在進行斷路測試。 中止springcloud-hystrix-consumer2這個服務,而後在到瀏覽器輸入:http://localhost:9004/hello/pancm 進行查看信息。

控制檯打印:

接受到請求參數:pancm,進行轉發到其餘服務
複製代碼

瀏覽器返回:

pancm, 請求另外一個服務失敗!
複製代碼

出現以上結果說明斷路器的功能已經實現了。

示例圖:

在這裏插入圖片描述

SpringCloud Hystrix-Dashboard

Hystrix-Dashboard 介紹

Hystrix-dashboard是一款針對Hystrix進行實時監控的工具,經過Hystrix Dashboard咱們能夠在直觀地看到各Hystrix Command的請求響應時間, 請求成功率等數據。

開發準備

開發環境

  • JDK:1.8
  • SpringBoot:2.1.1.RELEASE
  • SpringCloud:Finchley

注:不必定非要用上述的版本,能夠根據狀況進行相應的調整。須要注意的是SpringBoot2.x之後,jdk的版本必須是1.8以上!

確認了開發環境以後,咱們再來添加相關的pom依賴。

<dependencies>
	<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.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.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
</dependencies>
複製代碼

注: spring-boot-starter-actuator這個必須須要要,該jar能夠獲得SpringBoot項目的各類信息,關於該jar包的使用,能夠在springboot-actuator這個項目中進行查看。

SpringCloud Hystrix-Dashboard 示例

這裏咱們把上面的springcloud-hystrix-consumer項目進行改造下,項目名稱改成springcloud-hystrix-dashboard-consumer。而後在到啓動類新增以下配置。

  • EnableCircuitBreaker:表示啓用hystrix功能。
  • EnableHystrixDashboard:啓用 HystrixDashboard 斷路器看板 相關配置。

完整的啓動類配置以下:

@SpringBootApplication
	@EnableDiscoveryClient
	@EnableHystrixDashboard
	@EnableCircuitBreaker
	@EnableFeignClients
	public class HystrixDashboardApplication {
		public static void main(String[] args) {
			SpringApplication.run(HystrixDashboardApplication.class, args);
			  System.out.println("hystrix dashboard 服務啓動...");
		}
	}

複製代碼

而後在到application.properties配置文件中新增以下配置:

management.endpoints.web.exposure.include=hystrix.stream
	management.endpoints.web.base-path=/

複製代碼

該配置的意思是指定hystrixDashboard的訪問路徑,SpringBoot2.x以上必須指定,否則是沒法進行訪問的,訪問會出現 Unable to connect to Command Metric Stream 錯誤。

若是不想使用配置的話,也可使用代碼進行實現。 實現的代碼以下:

@Component
	public class HystrixServlet extends Servlet{
	
		@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;
	    }	
	}

複製代碼

功能測試

完成如上的工程改造以後,咱們啓動該程序。 而後在瀏覽器輸入:

http://localhost:9010/hystrix

會出現如下的界面:

在這裏插入圖片描述

能夠經過該界面監控使用了hystrix dashboard的項目。這裏咱們依照提示在中間的輸入框輸入以下的地址:

http://localhost:9010/hystrix.stream

會出現如下的界面:

在這裏插入圖片描述
該界面就是Hystrix Dashboard監控的界面了,經過這個界面咱們能夠很詳細的看到程序的信息。關於這些信息中說明能夠用網上找到的一張來加以說明。

在這裏插入圖片描述

: 若是界面一直提示loading,那麼是由於沒有進行請求訪問,只需在到瀏覽器上輸入:http://localhost:9010/hello/pancm,而後刷新該界面就能夠進行查看了。

其餘

springcloud系列博客:

項目地址

基於SpringBoot2.x、SpringCloud的Finchley版本開發的地址:github.com/xuwujing/sp…

基於SpringBoot1.x、SpringCloud 的Dalston版本開發的地址: github.com/xuwujing/sp…

若是感受項目不錯,但願能給個star,謝謝!

音樂推薦

夏天的夜晚,天上繁星點點,喳喳吵鬧的蟬鳴聲,遠處河流的流淌聲,此時若躺在山丘的草坪上,想必是無比的愜意吧!

原創不易,若是感受不錯,但願給個推薦!您的支持是我寫做的最大動力! 版權聲明: 做者:虛無境 博客園出處:www.cnblogs.com/xuwujing CSDN出處:blog.csdn.net/qazwsxpcm     我的博客出處:www.panchengming.com

前言

本篇主要介紹的是SpringCloud中的斷路器(Hystrix)和斷路器指標看板(Dashboard)的相關使用知識。

SpringCloud Hystrix

Hystrix 介紹

Netflix建立了一個名爲Hystrix的庫,它實現了斷路器模式。主要的目的是爲了解決服務雪崩效應的一個組件,是保護服務高可用的最後一道防線。

開發準備

開發環境

  • JDK:1.8
  • SpringBoot:2.1.1.RELEASE
  • SpringCloud:Finchley

注:不必定非要用上述的版本,能夠根據狀況進行相應的調整。須要注意的是SpringBoot2.x之後,jdk的版本必須是1.8以上!

確認了開發環境以後,咱們再來添加相關的pom依賴。

<dependencies>
	<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.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
    </dependency>
  <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
複製代碼

注: 實際上這裏是不須要Hystrix依賴的,Fegin已經添加了Hystrix依賴。

SpringCloud Hystrix 示例

因爲Hystrix機制是在微服務項目上進行的,而且Fegin中包含了該機制。因此這裏咱們能夠把以前的springcloud-feign的項目進行簡單的改造就好了。

服務端

首先是服務端這塊,爲了進行區分,建立一個springcloud-hystrix-eureka的項目,用於作註冊中心。 代碼和配置和以前的基本同樣。 application.properties配置信息:

配置信息:

spring.application.name=springcloud-hystrix-eureka-server
server.port=8002
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:8002/eureka/
複製代碼

配置說明:

  • spring.application.name: 這個是指定服務名稱。
  • server.port:服務指定的端口。
  • eureka.client.register-with-eureka:表示是否將本身註冊到Eureka Server,默認是true。
  • eureka.client.fetch-registry:表示是否從Eureka Server獲取註冊信息,默認爲true。
  • eureka.client.serviceUrl.defaultZone: 這個是設置與Eureka Server交互的地址,客戶端的查詢服務和註冊服務都須要依賴這個地址。

服務端這邊只須要在SpringBoot啓動類添加@EnableEurekaServer註解就能夠了,該註解表示此服務是一個服務註冊中心服務。

代碼示例:

@EnableEurekaServer
	@SpringBootApplication
	public class HystrixEurekaApplication {
	  public static void main(String[] args) {
	      SpringApplication.run(HystrixEurekaApplication.class, args);
	      System.out.println("hystrix註冊中心服務啓動...");
	  }
	}


複製代碼

客戶端

這裏咱們把以前的springcloud-fegin-consumer項目稍微改造下,項目名改成springcloud-hystrix-consumer。而後在application.properties配置文件新增以下配置, feign.hystrix.enabled配置表示是否啓用熔斷機制。

feign.hystrix.enabled=true

複製代碼

增長了配置以後,咱們在來把以前的fegin進行定義轉發服務的@FeignClient註解進行添加一個回調方法fallback。代碼改造後的實現以下:

@FeignClient(name= "springcloud-hystrix-consumer2",fallback = HelloRemoteHystrix.class)
	public interface HelloRemote {
	    @RequestMapping(value = "/hello")
	    public String hello(@RequestParam(value = "name") String name);
	}
	
複製代碼

最後新增一個回調類,用於處理斷路的狀況。這裏咱們就簡單的處理下,返回錯誤信息便可!

代碼示例:

@Component
	public class HelloRemoteHystrix implements HelloRemote{
	
	    @Override
	    public String hello(@RequestParam(value = "name") String name) {
	        return name+", 請求另外一個服務失敗!";
	    }
	}

複製代碼

其他的代碼就不展現了,和以前的springcloud-fegin-consumer項目中的一致,詳細的能夠在這篇博文SpringCloud學習系列之二 ----- 服務消費者(Feign)和負載均衡(Ribbon)進行查看。

而後在把以前的springcloud-feign-consumer2進行簡單的改造下,項目名稱改成springcloud-hystrix-consumer2。而後更改下配置的端口。

功能測試

完成如上的工程開發以後,咱們依次啓動服務端和客戶端的springcloud-hystrix-eurekaspringcloud-hystrix-consumerspringcloud-hystrix-consumer2這三個程序,而後在瀏覽器界面輸入:http://localhost:8002/,便可查看註冊中心的信息。

首先在瀏覽器輸入:

http://localhost:9004/hello/pancm

控制檯打印:

接受到請求參數:pancm,進行轉發到其餘服務
複製代碼

瀏覽器返回:

pancm,Hello World
複製代碼

而後再輸入:

http://localhost:9005/hello?name=pancm

瀏覽器返回:

pancm,Hello World
複製代碼

說明程序運行正常,fegin的調用也ok。這時咱們在進行斷路測試。 中止springcloud-hystrix-consumer2這個服務,而後在到瀏覽器輸入:http://localhost:9004/hello/pancm 進行查看信息。

控制檯打印:

接受到請求參數:pancm,進行轉發到其餘服務
複製代碼

瀏覽器返回:

pancm, 請求另外一個服務失敗!
複製代碼

出現以上結果說明斷路器的功能已經實現了。

示例圖:

在這裏插入圖片描述

SpringCloud Hystrix-Dashboard

Hystrix-Dashboard 介紹

Hystrix-dashboard是一款針對Hystrix進行實時監控的工具,經過Hystrix Dashboard咱們能夠在直觀地看到各Hystrix Command的請求響應時間, 請求成功率等數據。

開發準備

開發環境

  • JDK:1.8
  • SpringBoot:2.1.1.RELEASE
  • SpringCloud:Finchley

注:不必定非要用上述的版本,能夠根據狀況進行相應的調整。須要注意的是SpringBoot2.x之後,jdk的版本必須是1.8以上!

確認了開發環境以後,咱們再來添加相關的pom依賴。

<dependencies>
	<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.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.boot</groupId>
		<artifactId>spring-boot-starter-web</artifactId>
	</dependency>
</dependencies>
複製代碼

注: spring-boot-starter-actuator這個必須須要要,該jar能夠獲得SpringBoot項目的各類信息,關於該jar包的使用,能夠在springboot-actuator這個項目中進行查看。

SpringCloud Hystrix-Dashboard 示例

這裏咱們把上面的springcloud-hystrix-consumer項目進行改造下,項目名稱改成springcloud-hystrix-dashboard-consumer。而後在到啓動類新增以下配置。

  • EnableCircuitBreaker:表示啓用hystrix功能。
  • EnableHystrixDashboard:啓用 HystrixDashboard 斷路器看板 相關配置。

完整的啓動類配置以下:

@SpringBootApplication
	@EnableDiscoveryClient
	@EnableHystrixDashboard
	@EnableCircuitBreaker
	@EnableFeignClients
	public class HystrixDashboardApplication {
		public static void main(String[] args) {
			SpringApplication.run(HystrixDashboardApplication.class, args);
			  System.out.println("hystrix dashboard 服務啓動...");
		}
	}

複製代碼

而後在到application.properties配置文件中新增以下配置:

management.endpoints.web.exposure.include=hystrix.stream
	management.endpoints.web.base-path=/

複製代碼

該配置的意思是指定hystrixDashboard的訪問路徑,SpringBoot2.x以上必須指定,否則是沒法進行訪問的,訪問會出現 Unable to connect to Command Metric Stream 錯誤。

若是不想使用配置的話,也可使用代碼進行實現。 實現的代碼以下:

@Component
	public class HystrixServlet extends Servlet{
	
		@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;
	    }	
	}

複製代碼

功能測試

完成如上的工程改造以後,咱們啓動該程序。 而後在瀏覽器輸入:

http://localhost:9010/hystrix

會出現如下的界面:

在這裏插入圖片描述

能夠經過該界面監控使用了hystrix dashboard的項目。這裏咱們依照提示在中間的輸入框輸入以下的地址:

http://localhost:9010/hystrix.stream

會出現如下的界面:

在這裏插入圖片描述
該界面就是Hystrix Dashboard監控的界面了,經過這個界面咱們能夠很詳細的看到程序的信息。關於這些信息中說明能夠用網上找到的一張來加以說明。

在這裏插入圖片描述

: 若是界面一直提示loading,那麼是由於沒有進行請求訪問,只需在到瀏覽器上輸入:http://localhost:9010/hello/pancm,而後刷新該界面就能夠進行查看了。

其餘

springcloud系列博客:

項目地址

基於SpringBoot2.x、SpringCloud的Finchley版本開發的地址:github.com/xuwujing/sp…

基於SpringBoot1.x、SpringCloud 的Dalston版本開發的地址: github.com/xuwujing/sp…

若是感受項目不錯,但願能給個star,謝謝!

音樂推薦

夏天的夜晚,天上繁星點點,喳喳吵鬧的蟬鳴聲,遠處河流的流淌聲,此時若躺在山丘的草坪上,想必是無比的愜意吧!

原創不易,若是感受不錯,但願給個推薦!您的支持是我寫做的最大動力! 版權聲明: 做者:虛無境 博客園出處:www.cnblogs.com/xuwujing CSDN出處:blog.csdn.net/qazwsxpcm     我的博客出處:www.panchengming.com

相關文章
相關標籤/搜索