微服务熔断降级

什么是熔断降级

微服务中难免存在服务之间的远程调用,比如:内容管理服务远程调用媒资服务的上传文件接口,当微服务运行不正常会导致无法正常调用微服务,此时会出现异常,如果这种异常不去处理可能导致雪崩效应。

微服务的雪崩效应表现在服务与服务之间调用,当其中一个服务无法提供服务可能导致其它服务也死掉,比如:服务B调用服务A,由于A服务异常导致B服务响应缓慢,最后B、C等服务都不可用,像这样由一个服务所引起的一连串的多个服务无法提供服务即是微服务的雪崩效应,如下图:

如何解决由于微服务异常引起的雪崩效应呢?

可以采用熔断、降级的方法去解决。

熔断降级的相同点都是为了解决微服务系统崩溃的问题,但它们是两个不同的技术手段,两者又存在联系。

熔断:

当下游服务异常而断开与上游服务的交互,它就相当于保险丝,下游服务异常触发了熔断,从而保证上游服务不受影响。

降级:

当下游服务异常触发熔断后,上游服务就不再去调用异常的微服务而是执行了降级处理逻辑,这个降级处理逻辑可以是本地一个单独的方法。

 

两者都是为了保护系统,熔断是当下游服务异常时一种保护系统的手段,降级是熔断后上游服务处理熔断的方法。 

 

熔断降级处理

项目使用Hystrix框架实现熔断、降级处理,在feign-dev.yaml中配置。

1、开启Feign熔断保护

feign:hystrix:enabled: truecircuitbreaker:enabled: true

2.设置熔断的超时时间,为了防止一次处理时间较长触发熔断这里还需要设置请求和连接的超时时间,如下: 

hystrix:command:default:execution:isolation:thread:timeoutInMilliseconds: 30000  #熔断超时时间
ribbon:ConnectTimeout: 60000 #连接超时时间ReadTimeout: 60000 #读超时时间MaxAutoRetries: 0 #重试次数MaxAutoRetriesNextServer: 1 #切换实例的重试次数

3、定义降级逻辑

两种方法:

1)fallback

@FeignClient(value = "media-api",configuration = MultipartSupportConfig.class,fallback = MediaServiceClientFallback.class)
@RequestMapping("/media")
public interface MediaServiceClient{
...
}

 

定义一个fallback类MediaServiceClientFallback,此类实现了MediaServiceClient接口。

第一种方法无法取出熔断所抛出的异常,第二种方法定义MediaServiceClientFallbackFactory 可以解决这个问题。

2)fallbackFactory

第二种方法在FeignClient中指定fallbackFactory ,如下:

@FeignClient(value = "media-api",configuration = MultipartSupportConfig.class,fallbackFactory = MediaServiceClientFallbackFactory.class)

定义MediaServiceClientFallbackFactory如下:

@Slf4j
@Component
public class MediaServiceClientFallbackFactory implements FallbackFactory<MediaServiceClient> {@Overridepublic MediaServiceClient create(Throwable throwable) {return new MediaServiceClient(){@Overridepublic String uploadFile(MultipartFile upload, String objectName) {//降级方法log.debug("调用媒资管理服务上传文件时发生熔断,异常信息:{}",throwable.toString(),throwable);return null;}};}
}

 

降级处理逻辑:

返回一个null对象,上游服务请求接口得到一个null说明执行了降级处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/698329.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis原生命令及项目使用

主动更新策略 缓存问题及解决 布隆过滤出现哈希冲突解决方案: 选择合适的哈希函数:布隆过滤器的性能和哈希函数的选择密切相关。选择高效、低碰撞率的哈希函数可以降低误判率。通常使用的哈希函数有 MurmurHash、FNV 等。 合理设置过滤器大小:过滤器的大小(位数组的大小)…

资料同化 | 搭建docker环境-1

Community Gridpoint Statistical Interpolation (GSI) system DTC 是一个分布式设施&#xff0c;NWP 社区可以在这里测试和评估用于研究和操作的新模型和技术。 DTC的目标包括&#xff1a; 链接研究和操作社区 研究成果转化为实际操作的速度 加快改善天气预报 开发和测试有…

C语言易错提醒选择题精选

Ⅰ 易错题 1.设有double p;&#xff0c;为变量p声明一个引用名称rp,则定义语句为 double& rpp; 2.已知‘A’一‘Z’的ASCII码为65—90&#xff0c;当执行“char ch14*52&#xff1b;cout<<ch<<endl;”语句序列后得到的输出结H &#xff0c;72对应ASCII码中…

2.1 软件工程

第2章 信息技术知识 2.1 软件工程 现状&#xff1a; 开发软件的规模越来越大复杂度越来越高用户需求并不十分明确缺乏软件开发方法和工具方面的有效支持 软件成本日益增长、开发进度难以控制、软件质量无法保证、软件维护困难等问题日益突出。人们开始用工程的方法进行软件…

QCC---Aptx Lossless验证

因为aptx Lossless属于高通骁龙声音的一部分&#xff0c;一般支持高通骁龙声音的设备会支持到&#xff0c;比如说手机&#xff0c;而且还要支持最新的aptx adaptive协议R2.2版本。但是如果手上没有这样的手机的话&#xff0c;有source芯片也可以去做测试验证。在最新的784.1版本…

回溯算法-组合问题-力扣第77题

什么是组合问题—— 举例&#xff1a; 有一个集合&#xff1a;{1,2,3,4} 现在要找出这个集合里面所有组合大小&#xff08;组合长度&#xff0c;组合里面数据的个数&#xff09;为2的组合 那么就有&#xff1a;总共6种组合 {1,2}&#xff0c;{1,3}&#xff0c;{1,4} {2,3}…

小猪APP分发:掌握封装应用的艺术,优化用户体验

在移动应用市场日益激烈的竞争环境中&#xff0c;小猪APP分发www.ppzhu.net脱颖而出&#xff0c;成为众多开发者信赖的伙伴。它不仅简化了应用的发布流程&#xff0c;更通过其核心的封装技术&#xff0c;有效解决了应用分发中的一系列痛点&#xff0c;为用户带来无缝、高效的下…

Python从0到POC编写--函数

数学函数&#xff1a; 1. len len() 函数返回对象&#xff08;字符、列表、元组等&#xff09;长度或项目个数&#xff0c; 例如&#xff1a; str "python" len(str)2. range range() 函数返回的是一个可迭代对象&#xff08;类型是对象&#xff09;&#xff0c;…

Nios实验入门——用Verilog编程方式完成LED流水灯显示并使用串口输出“Hello Nios-II”字符到笔记本电脑

文章目录 前言一、Verilog编程方式完成LED流水灯显示1.1 新建工程并添加FPGA芯片1.2 新建.v文件并添加至顶层实体1.3 引脚分配1.4 编译(包含分析与综合)1.5 选择烧录器1.6 添加烧录文件1.7 下载1.8 实验现象 二、Verilog编程方式实现串口2.1 uart_tx.v文件2.2 test.v文件2.3 to…

【MySQL】sql表设计的注意事项

程序员的实用神器 文章目录 程序员的实用神器强烈推荐引言注意事项强烈推荐专栏集锦写在最后 强烈推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站:人工智能 推荐一个个人工作&#x…

Android面试题之Kotlin的apply、let、also、run函数

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 apply apply函数可以看作是一个配置函数&#xff0c;可以传入一个接收者&#xff0c;然后调用一系列函数来配置以便使用&#xff0c;如果提供l…

Redis-数据过期策略

文章目录 Redis数据持久化策略的作用是什么&#xff1f;Redis的数据过期策略有哪些&#xff1f;惰性删除定期删除 更多相关内容可查看 Redis数据持久化策略的作用是什么&#xff1f; Redis数据过期策略是指在Redis中设置数据的过期时间&#xff0c;并在数据过期时自动从数据库…