服务容错-hystrix
Hystrix也是netflix家的产品、在与Feign整合Ribbon整合上有着天然的优势、所以本次会在上次整合Feign的基础上再次加以改进。
目录
1、Hystrix概述
2、服务降级
3、服务熔断
4、dashboard服务监控
1、Hystrix概述
Hystrix值得说道的主要有服务降级、服务熔断和服务限流、这里先讲降级和熔断。
Hystrix是提高系统服务容错性的东东、说白了就是抗风险抗异常能力、是电路中的保险丝、但他比保险丝更智能的一点是、Hystrix保障的服务如果发生服务熔断了、还会看情形试图自动恢复服务功能。
2、服务降级
服务熔断主要有三种方法配置。一般在消费模块配置。
第一是在消费者Controller方式实现上标注@HystrixCommand并指定异常通知方法、当该方法发生了异常时、将会执行指定的异常通知方法。
第二是在消费者Controller类上标注@DefaultProperties注解并指定全局的异常通知方法。
第三是单独编写一个Callback类、实现某个具体接口、来定制该接口的异常通知、因为我们做了Feign接口抽取、所以我们在接口模块配置。
第四是单独写一个FallbackFactory的实现类、泛型限定一个接口、然后重写其create方法、在实现内可以打印异常信息和指定每个方法的异常通知、较callback类灵活、推荐使用
最后、这些编写的额外类都需要注入到IOC容器内才可使用、同时在YML文件内开启对hystrix的支持:
feign:
hystrix:
enabled: true #本模块要处理服务容错就开启
然后在启动类上配置@EnableHystrix
3、服务熔断
服务熔断配置在服务提供模块、当满足服务熔断配置要求后、后续的请求会直接调用服务降级指定的异常通知、当Hystrix判定可以继续提供服务时、才会重新放开请求、运行服务。
3.1、方法内配置
该配置可以配到服务提供模块的Controllr层、如果没有指定异常通知、将会调用callback指定的方法。
//服务熔断
@HystrixCommand(commandProperties = {
@HystrixProperty(name = "circuitBreaker.enabled",value = "true"), //是否开启断路器
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "5"), //请求次数
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"), //时间范围
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"), //失败率达到多少后跳闸
})
4、dashboard服务监控
dashboard是hystrix集成的一个监控模块、可以监控模块服务的访问情况等很多信息、来调试和优化服务架构。
这里需要一个单独的模块cloud-hystrix-dashboard-9001为例
4.1、POM文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
4.2、YML文件
spring.application.name=hystrix-dashboard-9001
server.port=9001
4.3、启动类
@SpringBootApplication
@EnableHystrixDashboard
4.4、被监控模块
这样一个监控模块就搭建成功了、但是还需要被监控模块的配合、
这里被监控模块一般是服务提供模块、该模块需要满足2个条件、1是引入如下依赖
`<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>`
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2是在启动类上新增`@EnableHystrix 注解、同时在YML上
#hystrix监控配置
management:
endpoints:
web:
exposure:
include: "*"