当前位置: 移动技术网 > IT编程>开发语言>Java > SpringCloud中的断路器(Hystrix)和断路器监控(Dashboard)

SpringCloud中的断路器(Hystrix)和断路器监控(Dashboard)

2019年07月19日  | 移动技术网IT编程  | 我要评论

gnome,美食杰网,董学姐 歌词

前言

本篇主要介绍的是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-consumer2进行简单的改造下,项目名称改为springcloud-hystrix-consumer2。然后更改下配置的端口。

功能测试

完成如上的工程开发之后,我们依次启动服务端和客户端的springcloud-hystrix-eureka、springcloud-hystrix-consumer和springcloud-hystrix-consumer2这三个程序,然后在浏览器界面输入:http://www.lhsxpumps.com/_localhost:8002/,即可查看注册中心的信息。

首先在浏览器输入:

控制台打印:

接受到请求参数:pancm,进行转发到其他服务

浏览器返回:

pancm,hello world

然后再输入:

浏览器返回:

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;
  } 
 }

功能测试

完成如上的工程改造之后,我们启动该程序。

 然后在浏览器输入:

会出现以下的界面:

可以通过该界面监控使用了hystrix dashboard的项目。这里我们依照提示在中间的输入框输入如下的地址:

会出现以下的界面:

该界面就是hystrix dashboard监控的界面了,通过这个界面我们可以很详细的看到程序的信息。关于这些信息中说明可以用网上找到的一张来加以说明。

注: 如果界面一直提示loading,那么是因为没有进行请求访问,只需在到浏览器上输入:http://localhost:9010/hello/pancm,然后刷新该界面就可以进行查看了。

项目地址

基于springboot2.x、springcloud的finchley版本开发的地址:https://github.com/xuwujing/springcloud-study

基于springboot1.x、springcloud 的dalston版本开发的地址:

总结

以上所述是小编给大家介绍的springcloud中的断路器(hystrix)和断路器监控(dashboard),希望对大家有所帮助

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网