前言

本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识。

SpringCloud Hystrix

Hystrix 介绍

Netflix创建了一个名为Hystrix的库,它实现了断路器模式。主要的目的是为了解决服务雪崩效应的一个组件,是保护服务高可用的最后一道防线。

开发准备

开发环境

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

注:不一定非要用上述的版本,可以根据情况进行相应的调整。需要注意的是SpringBoot2.x以后,jdk的版本必须是1.8以上!

确认了开发环境之后,我们再来添加相关的pom依赖。

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.cloud</groupId>
  8. <artifactId>spring-cloud-starter-openfeign</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.springframework.cloud</groupId>
  12. <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
  13. </dependency>
  14. <dependency>
  15. <groupId>org.springframework.boot</groupId>
  16. <artifactId>spring-boot-starter-web</artifactId>
  17. </dependency>
  18. </dependencies>

注: 实际上这里是不需要Hystrix依赖的,Fegin已经添加了Hystrix依赖。

SpringCloud Hystrix 示例

由于Hystrix机制是在微服务项目上进行的,并且Fegin中包含了该机制。所以这里我们可以把之前的springcloud-feign的项目进行简单的改造就行了。

服务端

首先是服务端这块,为了进行区分,创建一个springcloud-hystrix-eureka的项目,用于做注册中心。 代码和配置和之前的基本一样。

application.properties配置信息:

配置信息:

  1. spring.application.name=springcloud-hystrix-eureka-server
  2. server.port=8002
  3. eureka.client.register-with-eureka=false
  4. eureka.client.fetch-registry=false
  5. 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注解就可以了,该注解表示此服务是一个服务注册中心服务。

代码示例:


  1. @EnableEurekaServer
  2. @SpringBootApplication
  3. public class HystrixEurekaApplication {
  4. public static void main(String[] args) {
  5. SpringApplication.run(HystrixEurekaApplication.class, args);
  6. System.out.println("hystrix注册中心服务启动...");
  7. }
  8. }

客户端

这里我们把之前的springcloud-fegin-consumer项目稍微改造下,项目名改为springcloud-hystrix-consumer。然后在application.properties配置文件新增如下配置, feign.hystrix.enabled配置表示是否启用熔断机制。


  1. feign.hystrix.enabled=true

增加了配置之后,我们在来把之前的fegin进行定义转发服务的@FeignClient注解进行添加一个回调方法fallback。代码改造后的实现如下:


  1. @FeignClient(name= "springcloud-hystrix-consumer2",fallback = HelloRemoteHystrix.class)
  2. public interface HelloRemote {
  3. @RequestMapping(value = "/hello")
  4. public String hello(@RequestParam(value = "name") String name);
  5. }

最后新增一个回调类,用于处理断路的情况。这里我们就简单的处理下,返回错误信息即可!

代码示例:


  1. @Component
  2. public class HelloRemoteHystrix implements HelloRemote{
  3. @Override
  4. public String hello(@RequestParam(value = "name") String name) {
  5. return name+", 请求另一个服务失败!";
  6. }
  7. }

其余的代码就不展示了,和之前的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

控制台打印:

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

浏览器返回:

  1. pancm,Hello World

然后再输入:

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

浏览器返回:

  1. pancm,Hello World

说明程序运行正常,fegin的调用也ok。这时我们在进行断路测试。

停止springcloud-hystrix-consumer2这个服务,然后在到浏览器输入:http://localhost:9004/hello/pancm 进行查看信息。

控制台打印:

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

浏览器返回:

  1. 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依赖。

  1. <dependencies>
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.springframework.cloud</groupId>
  8. <artifactId>spring-cloud-starter-openfeign</artifactId>
  9. </dependency>
  10. <dependency>
  11. <groupId>org.springframework.cloud</groupId>
  12. <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
  13. </dependency>
  14. <dependency>
  15. <groupId>org.springframework.cloud</groupId>
  16. <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
  17. </dependency>
  18. <dependency>
  19. <groupId>org.springframework.boot</groupId>
  20. <artifactId>spring-boot-starter-actuator</artifactId>
  21. </dependency>
  22. <dependency>
  23. <groupId>org.springframework.boot</groupId>
  24. <artifactId>spring-boot-starter-web</artifactId>
  25. </dependency>
  26. </dependencies>

注: spring-boot-starter-actuator这个必须需要要,该jar可以得到SpringBoot项目的各种信息,关于该jar包的使用,可以在springboot-actuator这个项目中进行查看。

SpringCloud Hystrix-Dashboard 示例

这里我们把上面的springcloud-hystrix-consumer项目进行改造下,项目名称改为springcloud-hystrix-dashboard-consumer。然后在到启动类新增如下配置。

  • EnableCircuitBreaker:表示启用hystrix功能。
  • EnableHystrixDashboard:启用 HystrixDashboard 断路器看板 相关配置。

完整的启动类配置如下:


  1. @SpringBootApplication
  2. @EnableDiscoveryClient
  3. @EnableHystrixDashboard
  4. @EnableCircuitBreaker
  5. @EnableFeignClients
  6. public class HystrixDashboardApplication {
  7. public static void main(String[] args) {
  8. SpringApplication.run(HystrixDashboardApplication.class, args);
  9. System.out.println("hystrix dashboard 服务启动...");
  10. }
  11. }

然后在到application.properties配置文件中新增如下配置:


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

该配置的意思是指定hystrixDashboard的访问路径,SpringBoot2.x以上必须指定,不然是无法进行访问的,访问会出现 Unable to connect to Command Metric Stream 错误。

如果不想使用配置的话,也可以使用代码进行实现。

实现的代码如下:


  1. @Component
  2. public class HystrixServlet extends Servlet{
  3. @Bean
  4. public ServletRegistrationBean getServlet() {
  5. HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
  6. ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
  7. registrationBean.setLoadOnStartup(1);
  8. registrationBean.addUrlMappings("/hystrix.stream");
  9. registrationBean.setName("HystrixMetricsStreamServlet");
  10. return registrationBean;
  11. }
  12. }

功能测试

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

然后在浏览器输入:

http://localhost:9010/hystrix

会出现以下的界面:

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

http://localhost:9010/hystrix.stream

会出现以下的界面:

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

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

其他

springcloud系列博客:

项目地址

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

基于SpringBoot1.x、SpringCloud 的Dalston版本开发的地址: https://github.com/xuwujing/springcloud-study-old

如果感觉项目不错,希望能给个star,谢谢!

音乐推荐

夏天的夜晚,天上繁星点点,喳喳吵闹的蝉鸣声,远处河流的流淌声,此时若躺在山丘的草坪上,想必是无比的惬意吧!

原创不易,如果感觉不错,希望给个推荐!您的支持是我写作的最大动力!

版权声明:

作者:虚无境

博客园出处:http://www.cnblogs.com/xuwujing

CSDN出处:http://blog.csdn.net/qazwsxpcm    

个人博客出处:http://www.panchengming.com

SpringCloud学习系列之三----- 断路器(Hystrix)和断路器监控(Dashboard)的更多相关文章

  1. SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

    前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由 ...

  2. CAN总线学习系列之三——CAN控制器的选择

    CAN总线学习系列之三——CAN控制器的选择 在进行CAN总线开发前,首先要选择好CAN总线控制器.下面就比较一些控制器的特点. 一些主要的CAN总线器件产品 制造商 产品型号 器件功能及特点 Int ...

  3. SQL Sever 学习系列之三

    SQL Sever 学习系列之三 SQL Server 学习系列之一(薪酬方案+基础) SQL Server 学习系列之二(日期格式问题)         五.经理今天刚谈到with的用法(with的 ...

  4. SpringCloud学习笔记(5):Hystrix Dashboard可视化监控数据

    简介 上篇文章中讲了使用Hystrix实现容错,除此之外,Hystrix还提供了近乎实时的监控.本文将介绍如何进行服务监控以及使用Hystrix Dashboard来让监控数据图形化. 项目介绍 sc ...

  5. SpringCloud学习笔记(4):Hystrix容错机制

    简介 在微服务架构中,微服务之间的依赖关系错综复杂,难免的某些服务会出现故障,导致服务调用方出现远程调度的线程阻塞.在高负载的场景下,如果不做任何处理,可能会引起级联故障,导致服务调用方的资源耗尽甚至 ...

  6. 大数据学习系列之三 ----- HBase Java Api 图文详解

    版权声明: 作者:虚无境 博客园出处:http://www.cnblogs.com/xuwujing CSDN出处:http://blog.csdn.net/qazwsxpcm 个人博客出处:http ...

  7. SpringCloud学习系列<一>版本介绍

    SpringCloud学习踩坑记<一> SpringCloud版本迭代实在太快,学习起来也是各种坑,博主用的是"当前"的最新版本,借鉴周立老大的Spring Cloud ...

  8. SpringCloud之熔断器Hystrix及服务监控Dashboard

    目的:     服务雪崩效应 服务熔断服务降级 Hystrix默认超时时间设置 Hystrix服务监控Dashboard 服务雪崩效应 雪崩效应就是一种不稳定的平衡状态也是加密算法的一种特征,它指明文 ...

  9. 熔断器Hystrix及服务监控Dashboard

    服务雪崩效应 当一个请求依赖多个服务的时候: 正常情况下的访问 : 但是,当请求的服务中出现无法访问.异常.超时等问题时(图中的I),那么用户的请求将会被阻塞. 如果多个用户的请求中,都存在无法访问的 ...

随机推荐

  1. httpClient连接超时设置

    注: 每个HttpClinet对象设置都不一样 这里已3.x和4.x为例说明 1)3.X版本 创建连接 HttpClient httpClient=new DefaultHttpClient(); 这 ...

  2. 关于DataSet中Relations的应用

    using System; using System.Collections.Generic; using System.Text; using System.Data; namespace conn ...

  3. spring-mvc报红错误

    can't resolve spring  以及运行测试案例报错 ‘无法找到路径’ 解决办法是在pom文件里面重新配置 对应  resource <resources> <resou ...

  4. session熟知

    Session 服务器端保存会话信息的技术. //如何获得session HttpSession session = request.getSession(); //如何操作session sessi ...

  5. 【踩坑】iconfont使用异常bug

    你见过html页面上'x'字符变成打印机图标么?一般人应该没有. -----------------------诡异bug----------------------- 今天测试报了一个bug,说页面 ...

  6. Python3之利用Cookie模拟登录

    Python3之利用Cookie模拟登录 利用Cookie模拟登录步骤: 1.       在浏览器输入http://demo.bxcker.com,输入用户名和密码登录. 2.登录成功点" ...

  7. Spring中的循环依赖

    循环依赖 在使用Spring时,如果主要采用基于构造器的依赖注入方式,则可能会遇到循环依赖的情况,简而言之就是Bean A的构造器依赖于Bean B,Bean B的构造器又依赖于Bean A.在这种情 ...

  8. 1.Spring Framework 5.0 入门篇

    1.为什么学习Spring? 随着对Java EE的不断接触和理解,你会发现Spring  在各个企业和项目中发挥着越来越重要的作用.掌握Spring 已成为我们IT行业生存必学的本领之一. Spri ...

  9. 在JavaWeb项目中URL中字符串加密解密方案

    URL由来: 一般来说,URL只能使用英文字母.阿拉伯数字和某些标点符号,不能使用其他文字和符号.比如,世界上有英文字母的网址 “http://www.abc.com”,但是没有希腊字母的网址“htt ...

  10. Hexo的更新 主题的更换

    1:HEXO更新 ①hexo generate ②hexo deploy 2:  HEXO主题的更换,①找到主题的github地址后 进入自己的HEXO文件夹然后 git clone xxxx(地址) ...