当前位置:网站首页>微服务实战|熔断器Hystrix初体验
微服务实战|熔断器Hystrix初体验
2022-07-02 06:33:00 【_时光煮雨】
什么是Hystrix
在日常生活用电中,如果我们的电路中正确地安置了保险丝,那么在电压异常升高时,保险丝就会熔断以便切断电流,从而起到保护电路安全运行的作用。
在货船中,为了防止漏水和火灾的扩散,一般会将货仓进行分割,避免了一个货仓出事导致整艘船沉没的悲剧,这就是舱壁保护机制。
Hystrix提供的熔断器也类似,在调用某个服务提供者时,当一定时间内请求总数超过配置的阈值,且窗口期内错误率过高,那Hystrix就会对调用请求熔断,后续的请求直接短路,进入降级逻辑,并执行本地的降级策略。
同时Hystrix也将系统中的服务提供者隔离起来,一个服务提供者延迟过高或者失败,并不会导致整个系统的失败,同时也能够控制调用这些服务的并发度。
总之,Hystrix 能使你的系统在出现依赖服务失效的时候,通过隔离系统所依赖的服务,防止服务级联失败,同时提供失败回退机制,更优雅地应对失效,并使你的系统能更快地从异常中恢复。
Hystrix实战
接着我们上篇文章中的dms服务,进行如下修改:
Feign 本身就支持Hystrix,不需要额外引入依赖。
1、首先修改调用方app服务的配置文件application.xml,开启hystrix
feign:
hystrix:
enabled: true
2、增加服务熔断处理类,实现DmsApi接口
/** * @Author:公众号:程序员965 * @create 2022-06-26 **/
@Component
public class DmsHystrixImpl implements DmsApi {
@Override
public String findNameByCode(String code) {
return "服务器故障";
}
}
3、修改接口类注解,增加熔断处理类:fallback = DmsHystrixImpl.class;
(Spring Cloud Feign HTTP请求异常Fallback容错机制,它是基于Hystrix实现的,所以要通过配置参数feign.hystrix.enabled=true开启该功能)
/** * @Author:公众号:程序员965 * @create 2022-06-20 **/
@FeignClient(value = "dms",fallback = DmsHystrixImpl.class)
public interface DmsApi {
@RequestMapping(value="/dict/{code}", method = RequestMethod.GET)
public String findNameByCode(@PathVariable("code") String code);
}
4、增加异常代码,以便验证
/** * @Author:公众号:程序员965 * @create 2022-06-20 **/
@RestController
public class DmsController implements DmsApi {
@Override
public String findNameByCode(String code) {
Integer.parseInt("a");
switch (code){
case "0" :
return "男";
case "1" :
return "女";
default:
return "未知";
}
}
}
5、启动项目,进行验证,返回正确结果。
总结
在微服务架构中,通常会有多个服务间相互调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应。服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者”的不可用,并将不可用逐渐放大的过程。
如:A作为服务提供者,B为A的服务消费者,C和D是B的服务消费者。A不可用引起了B的不可用,并将不可用像滚雪球一样放大到C和D时,雪崩效应就形成了。为了避免雪崩效应的形成,就需要使用Hystrix。
边栏推荐
- Mysql安装时mysqld.exe报`应用程序无法正常启动(0xc000007b)`
- C language - Blue Bridge Cup - 7 segment code
- Multi version concurrency control mvcc of MySQL
- Gocv image reading and display
- Aneng logistics' share price hit a new low: the market value evaporated by nearly 10 billion yuan, and it's useless for chairman Wang Yongjun to increase his holdings
- I've taken it. MySQL table 500W rows, but someone doesn't partition it?
- 使用IBM MQ远程连接时报错AMQ 4043解决思路
- 盘点典型错误之TypeError: X() got multiple values for argument ‘Y‘
- 【Go实战基础】gin 如何获取 GET 和 POST 的请求参数
- 「Redis源码系列」关于源码阅读的学习与思考
猜你喜欢
Flink-使用流批一体API统计单词数量
《统计学习方法》——第五章、决策树模型与学习(上)
聊聊消息队列高性能的秘密——零拷贝技术
Qt——如何在QWidget中设置阴影效果
队列的基本概念介绍以及典型应用示例
WSL安装、美化、网络代理和远程开发
Cloud computing in my eyes - PAAS (platform as a service)
[go practical basis] how can gin get the request parameters of get and post
【Go实战基础】gin 如何绑定与使用 url 参数
Linux安装Oracle Database 19c RAC
随机推荐
Cloudrev self built cloud disk practice, I said that no one can limit my capacity and speed
gocv图片裁剪并展示
Nacos download, start and configure MySQL database
Oracle related statistics
First week of JS study
【Go实战基础】gin 如何设置路由
Right click menu of QT
Qt——如何在QWidget中设置阴影效果
Gocv image cutting and display
Synchronize files using unison
Aneng logistics' share price hit a new low: the market value evaporated by nearly 10 billion yuan, and it's useless for chairman Wang Yongjun to increase his holdings
Jd.com interviewer asked: what is the difference between using on or where in the left join association table and conditions
分布式服务架构精讲pdf文档:原理+设计+实战,(收藏再看)
Linux binary installation Oracle database 19C
2022/2/13 summary
Minecraft air Island service
AMQ6126问题解决思路
队列管理器running状态下无法查看通道
kubernetes部署loki日志系统
概率还不会的快看过来《统计学习方法》——第四章、朴素贝叶斯法