Hystrix-断路器

1.什么是断路器

断路器,就是微服务架构的保险丝

2.为什么需要Hystrix(保险丝)?

在微服务架构中,根据业务会拆分成一个一个微服务,服务与服务之间可以相互调用,为了保证高可用性,单个微服务通常会集群部署,但是由于网络等原因,不能保证服务100%可用,如果单个服务出现问题,调用的这个服务的服务就有可能出现线程阻塞,刚好这个时候又有大量的请求在访问当前服务,就会导致当前服务的线程资源不足,从而导致服务瘫痪,形成故障转移,导致服务雪崩

3.Hystrix是如何解决服务间调用问题的

资源隔离:鸡蛋不要放在一个篮子里(线程池隔离,信号量隔离)

服务降级:当调用目标服务出问题(超时,报错)时,会自动的调用一个本地方法,返回一个默认值

请求熔断:一旦确定目标服务出现问题(失败比例),Hystrix的熔断器会自动打开,拦截后续的所有请求,立刻判定失败,进行服务降级,过了单位的时间之后,熔断器就会变成半开状态,放行一个请求,如果还是失败,继续全开,拦截请求,否则熔断器关闭

4.Ribbon整合hystix

4.1 在Ribbon工程中,添加Hystix的依赖

      <!--添加hystrix依赖--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix</artifactId></dependency>

4.2 在启动类上添加注解

@EnableHystrix

4.3 在使用RestTemplate的地方,通过注解实现资源隔离

//    使用注解,隔离其他服务的调用资源,被该注解标记的方法会被Hystrix提供的线程调用(线程池隔离)
//    myFallBack就是降级方法的名字,当资源不足或者服务报错时,会走降级方法
//    熔断器默认已经开启@HystrixCommand(fallbackMethod = "myFallBack")@GetMapping("findStuById")public String findStudent( @RequestParam("sid")Integer sid){......}/*** 降级方法,这里的返回值类型与参数列表与被注解 @HystrixCommand标记的方法相同* @param sid* @return*/public String myFallBack( @RequestParam("sid")Integer sid){return "调用班级服务发生意外,走降级方法";}

5. Feign整合Hystrix

5.1 直接通过配置,开启Hystrix(在使用Feign的微服务中配置)

# 开启Feign的熔断器功能
feign.hystrix.enabled=true#Feign中已经整合了Hysrix,所以不需要添加任何依赖,Feign中的Hystrix功能默认关闭

5.2 配置Feign接口,编写降级的实现类

//注解里面value表示的是微服务的名称 fallback表示的是微服务调用出现问题,走的降级方法
@FeignClient(value = "spring-teacher",fallback = TeacherFallBack.class)
public interface ITeacherFeign {//    声明方法和请求路径,方法名可以随便起,但是为了后期管理方便,使用要调用的方法名@RequestMapping(value = "findTeaById",method = RequestMethod.GET)String getTeacherName( @RequestParam("tid")Integer tid);
}// 接口的实现类
@Component
public class TeacherFallBack implements ITeacherFeign {@Overridepublic String getTeacherName ( Integer tid ) {return "班级微服务调用教师微服务,走的降级方法";}
}//Feign整合Hystrix,如果调用的微服务出现问题,只是调用的微服务方法走降级方法,而Ribbon整合eHysrix则会全部走降级方法

5.3 Hysrtix的配置

# 配置Hystrix的常用属性
# 配置隔离策略 默认是线程池隔离策略 信号量隔离(SEMAPHORE)
hystrix.command.default.execution.isolation.strategy=THREAD
# 配置hystix的超时时间 hystix的默认超时时间为1s,这里配置500ms
# Fiegn的超时时间和hystrix的超时时间,哪个短哪个就起作用
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=500
#是否开启hysrix的超时时间,默认为true,如果设置为false,意为不超时,但是Feign的超时任然起作用
hystrix.command.default.execution.timeout.enabled=true#熔断器的相关配置
# 熔断器的相关配置,默认开启熔断器
hystrix.command.default.circuitBreaker.enabled=true
# 单位时间内,失败的次数,如果达到了这个阈值,那熔断器就会打开,默认是20次
hystrix.command.default.circuitBreaker.requestVolumeThreshold=5
# 多久之后,熔断器进入半开状态,默认是5s
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5000

6.Hystrix的仪表盘

1. 创建一个独立的springboot项目,作为hystrix的仪表盘工程,添加依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>

2. 在hystrix仪表盘工程的启动类上加入注解

@EnableHystrixDashboard

3. 在全局配置文件中修改端口号

4. 在浏览器端输入http://localhost:4000/hystrix

localhost:是指本机 4000:表示的是该工程的端口号

5.去到需要监控的微服务,进行配置

5.1 导入依赖

       <dependency><groupId>com.netflix.hystrix</groupId><artifactId>hystrix-metrics-event-stream</artifactId><version>1.5.18</version><scope>compile</scope></dependency>

5.2 在启动类上加入如下配置

   @Beanpublic ServletRegistrationBean<HystrixMetricsStreamServlet> getServlet(){HystrixMetricsStreamServlet hystrixMetricsStreamServlet= new HystrixMetricsStreamServlet();ServletRegistrationBean<HystrixMetricsStreamServlet>servletRegistrationBean = new ServletRegistrationBean();servletRegistrationBean.setServlet(hystrixMetricsStreamServlet);servletRegistrationBean.addUrlMappings("/hystrix.stream");servletRegistrationBean.setName("HystrixMetricsStreamServlet");return servletRegistrationBean;}

6. 去到仪表盘工程,配置监控地址即可

Hystrix-断路器相关推荐

  1. Spring Cloud构建微服务架构:服务容错保护(Hystrix断路器)【Dalston版】

    前言 在前两篇<Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)>和<Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)&g ...

  2. Hystrix面试 - 深入 Hystrix 断路器执行原理

    Hystrix面试 - 深入 Hystrix 断路器执行原理 RequestVolumeThreshold HystrixCommandProperties.Setter().withCircuitB ...

  3. SpringCloud中 Feign结合Hystrix断路器开发。

    Feign结合Hystrix断路器开发: 转载于:https://www.cnblogs.com/longdb/p/10468371.html

  4. Hystrix断路器执行原理

    深入 Hystrix 断路器执行原理 Hystrix熔断机制,用于监控微服务调用情况,当失败的情况达到预定的阈值(5秒失败20次),会打开断路器,拒绝所有请求,直到服务恢复正常为止. circuitB ...

  5. 五、Hystrix断路器

    Hystrix断路器 概述 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每一个依赖关系在某些时候将不可避免的失败. 服务雪崩 多个微服务之间调用的时候,假如微服务A调用微服务 ...

  6. Hystrix断路器原理及实现(服务降级、熔断、限流)

    Hystrix断路器原理及实现(服务降级.熔断.限流) 分布式系统面临的问题 Hystrix重要概念(面试常考) Hystrix案例 Hystrix 服务提供者 Hystrix 服务消费者 原因与解决 ...

  7. Netflix Hystrix断路器简介与工作原理

    一.前言? 1.Netflix Hystrix断路器是什么? Netflix Hystrix是SOA/微服务架构中提供服务隔离.熔断.降级机制的工具/框架.Netflix Hystrix是断路器的一种 ...

  8. 微服务——Hystrix断路器(豪猪哥)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 概述 分布式系统面临的问题 是什么 能干嘛 Hystrix重要概念 服务降级(fallback) 哪些情况会触发降级 服务熔 ...

  9. SpringCloud07 - Hystrix 断路器

    扯淡: 服务与服务之间有业务关联就需要调用,当被调用的服务发生故障(上线后多半是由于网路原因导致连接超时),必然会波及到服务调用者.通俗讲,断路器就是在低层级的服务发生故障时将服务间的连接断开. 个人 ...

  10. SpringClound——Hystrix断路器

    SpringCloud学习资料汇总超级棒的 如上是我在看文章时忽然看到的一个很好的学习SpringCloud的网站 SpringClound--微服务概述--史上最烂 SpringClound--Sp ...

最新文章

  1. gitlab如何克隆项目到本地进行开发,如何让webstorm项目右键菜单出现Git子菜单,右下角出现Matser分支
  2. vue中如何加入横线_在word文档中如何快速添加页眉横线和删除页眉横线?
  3. python 魔法参数*argv 和 **kw
  4. 最新android 手机型号,各大安卓手机厂商Android 10系统更新汇总,你的机型支持吗?...
  5. eigen3.3.8帮助文档下载 chm_MAXHUB文档v1.10.1-MAXHUB文档电脑版下载
  6. stm32定时器中断类型分析
  7. 内核参数 linux dd,Linux dd命令使用示例
  8. 电子科技大学20春《c语言》在线作业1,电子科技大学20春《C语言(专科)》在线作业1.doc...
  9. initrd.img处理
  10. 软件项目开发中的团队角色和个体角色
  11. 产品设计体会(2002)产品设计的五个层次
  12. Qcom平台添加 Camera 驱动(msm8953)
  13. Macbook 终端命令使用sudo时改用指纹解锁
  14. c++ vector随机排序
  15. 一闪一闪的星星特效效果
  16. notepad++的JSONviewer插件
  17. 群晖虚拟机安装centos7.9
  18. ProcessOn -在线绘图
  19. 银河麒麟安装配置python39
  20. 关于H.264 x264 h264 AVC1

热门文章

  1. 切条机切带机中达优控定长送料触摸屏一体机程序 超声切带和热切都可以通用
  2. 第2章 数据库关系模型---数据库原理及应用
  3. 七牛云 上传图片问题
  4. 化工图纸中LISP_化工工艺图纸标识代号
  5. UDP-B-L-阿拉伯糖二钠盐,UDP-b-L-arabinopyranose disodium salt,15839-78-8
  6. 03.MAC地址_IP地址_子网掩码
  7. ENVI及IDL学习素材:视频,源码,培训教材
  8. 主成分分析:sklearn.decomposition.PCA
  9. bzoj5042: LWD的分科岛 两种做法
  10. 用Star Walk看星星,才是仰望星空的正确姿势