Hystrix 配合 Feign 使用
Hystrix 配合 Feign 使用
注:该授权部分是自己研究出来的,可能存在争议
Hystrix 简称熔断器、断路器,当接口发生访问错误或者并发量太高导致接口出现故障时,Hystrix 可以根据既定规则对该接口之后的请求进行引导(执行回退函数等),防止系统过载或形成雪崩效应。
Feign 可以使用其进行声明式的 REST 接口调用,简化微服务调用方式,并且 Feign 支持微服务接口授权调用。
经过研究发现,Hystrix 和 Feign 官方又提供无授权验证(验证是否有权限调用接口)接口调用版本的整合,但是无需授权才能调用的接口的整合。
一、使用 Hystrix 和 Feign 整合调用微服务无需授权接口
1、向项目中添加 Hystrix
具体版本号可以去 Maven Repository: org.springframework.cloud » spring-cloud-starter-netflix-hystrix (mvnrepository.com) 这里查找。
2、向启动器添加 @EnableCircuitBreaker
注解
3、使用 @HystrixCommand
注解为接口指定回退方法和一些参数。
常用的参数有:
-
fallbackMethod :字符串 当接口发生错误时,要执行的方法。
-
ignoreExceptions :Class对象列表 需要忽略的异常
-
commandProperties :@HystrixProperty注解列表 用来对HystrixCommand 进行更深入的配置
使用资料在 Hystrix/hystrix-contrib/hystrix-javanica at master · Netflix/Hystrix · GitHub
4、Feign 使用 Hystrix,在 @FeignClient 注解中有 fallback 属性,可以使用该属性为 FeignClient 接口指定回退类,示例如下:
5、当我们需要记录回退(也就是为啥子调用出错)的原因的时候,只需使用 @FeignClient 中的 fallbackFactory 属性指定回退工厂,该回退工厂需实现 FallbackFactory 接口。示例如下:
二 、使用 Feign + Hystrix 访问需要密码认证的接口
1、去掉 UserInfoServerClient 的 @FeignClient 注解
2、创建 UserInfoServerFactoryBeanExt 类 ,该类继承于 FeignClientFactoryBean,代码如下:
3、创建 UserInfoServerClientExt 类,并将其注册成为 Spring Boot 组件
4、在接口上使用 @HystrixCommand(fallbackMethod = "usageFallBack") 注释,表示当接口发生错误时,将执行该方法。
4、自动注入 UserInfoServerClientExt 即可使用 UserInfoServerClient 访问需要认证授权的接口
三、其他
1、为 Feign 禁用 Hystrix
1、为指定 Feign 客户端禁用 Hystrix
-
新建一个 Feign 配置类,代码如下
-
在想要禁用 Hystrix 的 @FeignClient 引用该配置类即可,例如
2、全局禁用 Hystrix
- 在application.yml 中配置 feign.hystrix.enable = false 即可。
__EOF__

本文链接:https://www.cnblogs.com/zolmk/p/14074020.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义