springCloud学习【二】:服务熔断:Hystrix容错框架【实例】
熔断器Demo
代码地址
☆本文章的代码地址——需单独下载
★项目完整代码——gitee地址:不断更新
说明:基于上一篇博文写下面的Demo
服务熔断、雪崩、降级等概念
根据其他的Blog和官网解释自己总结:
熔断:当下游的服务因为某种原因突然变得不可用或响应过慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用
雪崩:一个服务的失败,导致整条产业链的服务都失败的现象
降级:服务降级有很多种降级方式,如开关降级、限流降级、熔断降级。熔断理解为降级的一种方式降级:举例:A服务调用B服务,但是B服务因为某些原因挂掉了,那么A继续调用就会报错,这种情况下,让A不要去调用B服务了,直接掉自己的逻辑实现业务逻辑,理解为降级的手段之一。
降级:举例:还是A调B,B响应太慢了,让B停掉自己的一些不重要的业务逻辑,来增加B响应A的速度
降级:熔断理解为降级的一种方式。也是本文要进行学习的内容
Hystrix解释
网上一堆堆解释,这里只说它是个啥
Hystrix是Netflix开源的一款容错框架,同样具有自我保护能力。完了…?嗯,完了,就是个这东西。本文要学习的便是这个玩意
服务消费添加熔断机制【Ribbon+restTemplate方式消费服务时】
- 在基于Ribbon的消费者模块的pom.xml中添加依赖
- 启动类增加注解
@EnableHystrix
- 消费服务的地方增加注解
@HystrixCommand(fallbackMethod = "err" )
err为调用错误时去执行什么方法 - 依次启动注册中心,三个服务提供者,一个消费者。registry-service-service1-service2-consume
现在的端口我的依次是 8770-8771-8775-8774-8772
然后postMan发送请求测试
可见三个服务都正常
然后停止掉8774的服务提供者,再次测试
可见,没有报错,而是执行了另一个方法,达到熔断效果,也称之为服务降级,A不再去调用B,而是执行了本项目的err方法。
服务消费添加熔断机制【Feign方式消费服务时】
- Feign自带熔断器的功能,不过需要手动配置开启,再feign消费端配置文件配置,如下图
feign.hystrix.enabled:true·
- 然后上一章说的,使用feign消费服务不需要实现类接口,现在要进行服务降级,就需要实现该接口了,如下图
- 修改
IService.java
接口文件,注解后面增加,fallback=IServiceImpl.class
,标识调用服务失败时去执行什么
★踩坑:如果使用feign方式消费服务,同时要进行服务降级的操作,那么@RequestMapping就不能加在类上了。直接改为写在方法上请求全路径,否则会包错:There is already 'XXXXX' bean method
4.依次启动注册中心,三个服务和基于feign的服务消费者,请求没有问题之后,停掉一个服务。测试如下
有错了, 返回了实现类的消息
结束:总结写在前面了更详细的总结写在Demo项目里面,请下载,不要积分,点个赞即可
未完待续——如果看到这里了,(●'◡'●)该去点赞了啊喂
有空写完其他的服务相关的再来补充,啥玩意路由啊,断路器啊,消息总线啊,服务链路啊啥的。