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实现降级相关推荐

  1. Java微服务篇2——SpringCloud

    Java微服务篇2--SpringCloud 1.微服务架构 1.1.单体应用架构 的⽤户量.数据量规模都⽐较⼩,项目所有的功能模块都放在一个工程中编码. 编译.打包并且部署在一个Tomcat容器中的 ...

  2. Linux服务器安装JavaWeb环境(四) Sentinel,Xxl-Job,Seata

    /*****************[安装Sentinel]****************/ Sentinel主要负责流控,熔断,降级,分为两部分,服务端maven依赖包和Sentinel-Dash ...

  3. Spring Cloud 工具集

    SpringCloud微服务组件 consul consul是一个可以提供服务发现,健康检查,多数据中心,Key/Value存储等功能的分布式服务框架,用于实现分布式系统的服务发现与配置.与其他分布式 ...

  4. 从前慢-SpringCloud

    SpringCloud 1 什么是微服务 官网: https://www.martinfowler.com/articles/microservices.html In short, the micr ...

  5. SpringCloud 微服务工具集v1.1

    SpringCloud 微服务工具集v1.1 版本: Hoxton SR6 1.什么是微服务 官网: https://www.martinfowler.com/articles/microservic ...

  6. SpringCloud入门之项目实例

    SpringCloud 版本: Hoxton SR6 1.什么是微服务 官网: https://www.martinfowler.com/articles/microservices.html In ...

  7. SpringCloud 微服务工具集 SpringCloud 版本: Hoxton SR6

    SpringCloud 微服务工具集v1.1 SpringCloud版本: Hoxton SR6 SpringBoot版本: 2.2.x --2.3.x 1.什么是微服务 官网: https://ww ...

  8. SpringCloud+SpringCloudAlibaba

    版本选择: SpringBoot:2.6.11 SpringCloud:2021.0.4(由SpringCloud决定SpringBoot的版本) SpringCloudAlibaba:2021.0. ...

  9. 尚硅谷-SpringCloud

    尚硅谷SpringCloud框架开发教程(SpringCloudAlibaba微服务分布式架构丨Spring Cloud) 1.是什么:Spring Cloud是一系列框架的有序集合 2.版本选型:S ...

最新文章

  1. 漫步者煲耳机软件_它是苹果AirPods的“真香替身”——漫步者lolliPods开箱体验...
  2. Django | 执行项目下指定的脚本
  3. 面试官问我:什么是JavaScript闭包,我该如何回答
  4. C++ 查看输入流中的下一个字符
  5. 【sql进阶】查询每天、每个设备的第一条数据
  6. M1卡说明及使用proxmark3破解方法
  7. 论文中的一些数学符号表示
  8. uni-app真机调试报错request:fail abort解决方法
  9. 关于ADO.NET的困惑
  10. 睡眠排序、面条排序、猴子排序...........................
  11. Kafka+Spark Streaming+Redis实时计算整合实践
  12. 火狐浏览器50Linux32位,火狐浏览器32位完整离线安装包下载
  13. 正大国际:期货日内波段交易
  14. 创建视图,修改视图,修改视图数据
  15. 电商直播的直播类型有哪些?
  16. 服务器怎么用固态盘安装系统,服务器使用固态盘安装
  17. 澳洲留学:说说在澳洲打工的那些苦与痛
  18. linux查看php端口,Linux如何查看端口状态
  19. 直播平台软件开发中选择点播播放器哪家强?
  20. 重拾javascript动态客户端网页脚本

热门文章

  1. Git学习-Git时光机之版本回退(二)
  2. 驱动以SN码获取流程定制Barcode属性
  3. Visual C++中error spawning cl.exe错误的两种解决方法
  4. 2022年全球市场机械蒸汽再压缩(MVR)总体规模、主要生产商、主要地区、产品和应用细分研究报告
  5. 学习HCIA第八天 VLAN原理和配置
  6. [转载]ExtJs4 笔记(4) Ext.XTemplate 模板
  7. 翻转和旋转计算机教学,小学信息技术《翻转/旋转》教学设计及教学反思
  8. Type ‘HTMLElement | null‘ is not assignable to type ‘HTMLElement‘
  9. 借助数商云房地产行业采购平台解决方案,实现简单、智能、合规的采购
  10. 潭州学院html学习(day09)