Hystrix-断路器
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-断路器相关推荐
- Spring Cloud构建微服务架构:服务容错保护(Hystrix断路器)【Dalston版】
前言 在前两篇<Spring Cloud构建微服务架构:服务容错保护(Hystrix服务降级)>和<Spring Cloud构建微服务架构:服务容错保护(Hystrix依赖隔离)&g ...
- Hystrix面试 - 深入 Hystrix 断路器执行原理
Hystrix面试 - 深入 Hystrix 断路器执行原理 RequestVolumeThreshold HystrixCommandProperties.Setter().withCircuitB ...
- SpringCloud中 Feign结合Hystrix断路器开发。
Feign结合Hystrix断路器开发: 转载于:https://www.cnblogs.com/longdb/p/10468371.html
- Hystrix断路器执行原理
深入 Hystrix 断路器执行原理 Hystrix熔断机制,用于监控微服务调用情况,当失败的情况达到预定的阈值(5秒失败20次),会打开断路器,拒绝所有请求,直到服务恢复正常为止. circuitB ...
- 五、Hystrix断路器
Hystrix断路器 概述 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每一个依赖关系在某些时候将不可避免的失败. 服务雪崩 多个微服务之间调用的时候,假如微服务A调用微服务 ...
- Hystrix断路器原理及实现(服务降级、熔断、限流)
Hystrix断路器原理及实现(服务降级.熔断.限流) 分布式系统面临的问题 Hystrix重要概念(面试常考) Hystrix案例 Hystrix 服务提供者 Hystrix 服务消费者 原因与解决 ...
- Netflix Hystrix断路器简介与工作原理
一.前言? 1.Netflix Hystrix断路器是什么? Netflix Hystrix是SOA/微服务架构中提供服务隔离.熔断.降级机制的工具/框架.Netflix Hystrix是断路器的一种 ...
- 微服务——Hystrix断路器(豪猪哥)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 概述 分布式系统面临的问题 是什么 能干嘛 Hystrix重要概念 服务降级(fallback) 哪些情况会触发降级 服务熔 ...
- SpringCloud07 - Hystrix 断路器
扯淡: 服务与服务之间有业务关联就需要调用,当被调用的服务发生故障(上线后多半是由于网路原因导致连接超时),必然会波及到服务调用者.通俗讲,断路器就是在低层级的服务发生故障时将服务间的连接断开. 个人 ...
- SpringClound——Hystrix断路器
SpringCloud学习资料汇总超级棒的 如上是我在看文章时忽然看到的一个很好的学习SpringCloud的网站 SpringClound--微服务概述--史上最烂 SpringClound--Sp ...
最新文章
- gitlab如何克隆项目到本地进行开发,如何让webstorm项目右键菜单出现Git子菜单,右下角出现Matser分支
- vue中如何加入横线_在word文档中如何快速添加页眉横线和删除页眉横线?
- python 魔法参数*argv 和 **kw
- 最新android 手机型号,各大安卓手机厂商Android 10系统更新汇总,你的机型支持吗?...
- eigen3.3.8帮助文档下载 chm_MAXHUB文档v1.10.1-MAXHUB文档电脑版下载
- stm32定时器中断类型分析
- 内核参数 linux dd,Linux dd命令使用示例
- 电子科技大学20春《c语言》在线作业1,电子科技大学20春《C语言(专科)》在线作业1.doc...
- initrd.img处理
- 软件项目开发中的团队角色和个体角色
- 产品设计体会(2002)产品设计的五个层次
- Qcom平台添加 Camera 驱动(msm8953)
- Macbook 终端命令使用sudo时改用指纹解锁
- c++ vector随机排序
- 一闪一闪的星星特效效果
- notepad++的JSONviewer插件
- 群晖虚拟机安装centos7.9
- ProcessOn -在线绘图
- 银河麒麟安装配置python39
- 关于H.264 x264 h264 AVC1
热门文章
- 切条机切带机中达优控定长送料触摸屏一体机程序 超声切带和热切都可以通用
- 第2章 数据库关系模型---数据库原理及应用
- 七牛云 上传图片问题
- 化工图纸中LISP_化工工艺图纸标识代号
- UDP-B-L-阿拉伯糖二钠盐,UDP-b-L-arabinopyranose disodium salt,15839-78-8
- 03.MAC地址_IP地址_子网掩码
- ENVI及IDL学习素材:视频,源码,培训教材
- 主成分分析:sklearn.decomposition.PCA
- bzoj5042: LWD的分科岛 两种做法
- 用Star Walk看星星,才是仰望星空的正确姿势