当前位置:网站首页>微服务实战|熔断器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。
边栏推荐
- 十年開發經驗的程序員告訴你,你還缺少哪些核心競爭力?
- Image transformation, transpose
- Leetcode sword finger offer brush questions - day 23
- Gocv boundary fill
- Concise analysis of redis source code 11 - Main IO threads and redis 6.0 multi IO threads
- 队列的基本概念介绍以及典型应用示例
- 盘点典型错误之TypeError: X() got multiple values for argument ‘Y‘
- Qt的拖动事件
- C4D quick start tutorial - Chamfer
- Minecraft plug-in service opening
猜你喜欢

Cloudrev self built cloud disk practice, I said that no one can limit my capacity and speed

查看was发布的应用程序的端口

Web技术发展史

Minecraft plug-in service opening

Talk about the secret of high performance of message queue -- zero copy technology

机器学习之数据类型案例——基于朴素贝叶斯法,用数据辩男女

Cloudreve自建云盘实践,我说了没人能限制得了我的容量和速度

During MySQL installation, mysqld Exe reports that the application cannot start normally (0xc000007b)`

小米电视不能访问电脑共享文件的解决方案

History of Web Technology
随机推荐
一个经典约瑟夫问题的分析与解答
聊聊消息队列高性能的秘密——零拷贝技术
京东面试官问:LEFT JOIN关联表中用ON还是WHERE跟条件有什么区别
gocv图片裁剪并展示
C# 调用系统声音 嘀~
QT qtimer class
机器学习之数据类型案例——基于朴素贝叶斯法,用数据辩男女
WSL安装、美化、网络代理和远程开发
Leetcode sword finger offer brush questions - day 22
Webflux responsive programming
Openshift container platform community okd 4.10.0 deployment
gocv拆分颜色通道
Function ‘ngram‘ is not defined
Win10 uses docker to pull the redis image and reports an error read only file system: unknown
【Go实战基础】gin 如何验证请求参数
Find the node with the smallest value range in the linked list and move it to the front of the linked list
Nacos download, start and configure MySQL database
C# 高德地图 根据经纬度获取地址
libusb的使用
《统计学习方法》——第五章、决策树模型与学习(上)