OpenFeign实现降级
Hystrix也可以配合Feign进行降级,我们可以对应接口中定义的远程调用单独进行降级操作。
比如我们还是以用户服务挂掉为例,那么这个时候肯定是会远程调用失败的,也就是说我们的Controller中的方法在执行过程中会直接抛出异常,进而被Hystrix监控到并进行服务降级。
而实际上导致方法执行异常的根源就是远程调用失败,所以我们换个思路,既然用户服务调用失败,那么我就给这个远程调用添加一个替代方案,如果此远程调用失败,那么就直接上替代方案。那么怎么实现替代方案呢?我们知道Feign都是以接口的形式来声明远程调用,那么既然远程调用已经失效,我们就自行对其进行实现,创建一个实现类,对原有的接口方法进行替代方案实现:
@Component //注意,需要将其注册为Bean,Feign才能自动注入
public class UserFallbackClient implements UserClient{@Overridepublic User getUserById(int uid) { //这里我们自行对其进行实现,并返回我们的替代方案User user = new User();user.setName("我是替代方案");return user;}
}
实现完成后,我们只需要在原有的接口中指定失败替代实现即可:
//fallback参数指定为我们刚刚编写的实现类
@FeignClient(value = "userservice", fallback = UserFallbackClient.class)
public interface UserClient {@RequestMapping("/user/{uid}")User getUserById(@PathVariable("uid") int uid);
}
现在去掉BorrowController
的@HystrixCommand
注解和备选方法:
@RestController
public class BorrowController {@ResourceBorrowService service;@RequestMapping("/borrow/{uid}")UserBorrowDetail findUserBorrows(@PathVariable("uid") int uid){return service.getUserBorrowDetailByUid(uid);}
}
最后我们在配置文件中开启熔断支持:
feign:circuitbreaker:enabled: true
启动服务,调用接口试试看:
可以看到,现在已经采用我们的替代方案作为结果。
OpenFeign实现降级相关推荐
- Java微服务篇2——SpringCloud
Java微服务篇2--SpringCloud 1.微服务架构 1.1.单体应用架构 的⽤户量.数据量规模都⽐较⼩,项目所有的功能模块都放在一个工程中编码. 编译.打包并且部署在一个Tomcat容器中的 ...
- Linux服务器安装JavaWeb环境(四) Sentinel,Xxl-Job,Seata
/*****************[安装Sentinel]****************/ Sentinel主要负责流控,熔断,降级,分为两部分,服务端maven依赖包和Sentinel-Dash ...
- Spring Cloud 工具集
SpringCloud微服务组件 consul consul是一个可以提供服务发现,健康检查,多数据中心,Key/Value存储等功能的分布式服务框架,用于实现分布式系统的服务发现与配置.与其他分布式 ...
- 从前慢-SpringCloud
SpringCloud 1 什么是微服务 官网: https://www.martinfowler.com/articles/microservices.html In short, the micr ...
- SpringCloud 微服务工具集v1.1
SpringCloud 微服务工具集v1.1 版本: Hoxton SR6 1.什么是微服务 官网: https://www.martinfowler.com/articles/microservic ...
- SpringCloud入门之项目实例
SpringCloud 版本: Hoxton SR6 1.什么是微服务 官网: https://www.martinfowler.com/articles/microservices.html In ...
- SpringCloud 微服务工具集 SpringCloud 版本: Hoxton SR6
SpringCloud 微服务工具集v1.1 SpringCloud版本: Hoxton SR6 SpringBoot版本: 2.2.x --2.3.x 1.什么是微服务 官网: https://ww ...
- SpringCloud+SpringCloudAlibaba
版本选择: SpringBoot:2.6.11 SpringCloud:2021.0.4(由SpringCloud决定SpringBoot的版本) SpringCloudAlibaba:2021.0. ...
- 尚硅谷-SpringCloud
尚硅谷SpringCloud框架开发教程(SpringCloudAlibaba微服务分布式架构丨Spring Cloud) 1.是什么:Spring Cloud是一系列框架的有序集合 2.版本选型:S ...
最新文章
- 漫步者煲耳机软件_它是苹果AirPods的“真香替身”——漫步者lolliPods开箱体验...
- Django | 执行项目下指定的脚本
- 面试官问我:什么是JavaScript闭包,我该如何回答
- C++ 查看输入流中的下一个字符
- 【sql进阶】查询每天、每个设备的第一条数据
- M1卡说明及使用proxmark3破解方法
- 论文中的一些数学符号表示
- uni-app真机调试报错request:fail abort解决方法
- 关于ADO.NET的困惑
- 睡眠排序、面条排序、猴子排序...........................
- Kafka+Spark Streaming+Redis实时计算整合实践
- 火狐浏览器50Linux32位,火狐浏览器32位完整离线安装包下载
- 正大国际:期货日内波段交易
- 创建视图,修改视图,修改视图数据
- 电商直播的直播类型有哪些?
- 服务器怎么用固态盘安装系统,服务器使用固态盘安装
- 澳洲留学:说说在澳洲打工的那些苦与痛
- linux查看php端口,Linux如何查看端口状态
- 直播平台软件开发中选择点播播放器哪家强?
- 重拾javascript动态客户端网页脚本
热门文章
- Git学习-Git时光机之版本回退(二)
- 驱动以SN码获取流程定制Barcode属性
- Visual C++中error spawning cl.exe错误的两种解决方法
- 2022年全球市场机械蒸汽再压缩(MVR)总体规模、主要生产商、主要地区、产品和应用细分研究报告
- 学习HCIA第八天 VLAN原理和配置
- [转载]ExtJs4 笔记(4) Ext.XTemplate 模板
- 翻转和旋转计算机教学,小学信息技术《翻转/旋转》教学设计及教学反思
- Type ‘HTMLElement | null‘ is not assignable to type ‘HTMLElement‘
- 借助数商云房地产行业采购平台解决方案,实现简单、智能、合规的采购
- 潭州学院html学习(day09)