Feign如何针对单个服务屏蔽Hystrix熔断功能
1. 说明
在实际项目中,需要针对单个服务屏蔽Hystrix,但又不想影响对其他服务调用的熔断降级功能。我们知道hystrix有default默认全局配置, 也有根据HystrixCommandKey针对接口做具体配置,但是某个服务可能会有很多接口, 并不能解决针对单个服务屏蔽Hystrix功能,有没有简便快速的实现方法? 查阅官方资料,是可以支持的。
2. 实现
官方的文档写得比较粗略,没有实际的实例,而且在实际运用中, 没有配置正确会有额外的问题。
整体思路是创建一个独立的Feign实例,提供给需要屏蔽的服务, 其他仍走系统初始化的可以支持Hystrix的Fegin实例。
创建独立的配置类
FeignClientWithoutHystrixConfig
// @Configuration public class FeignClientWithoutHystrixConfig {private final Logger log = LoggerFactory.getLogger(this.getClass());/*** 创建独立的Fegin调用实例* @return*/@Bean@Scope("prototype")public Feign.Builder feignBuilder() {log.debug("Creating feign builder without hystrix");return Feign.builder();} }
说明: @Configuration注解实质上是可以注释的, 如果不想注释, 需要排除扫描, 否则会覆盖默认的Feign实例。
@ComponentScan(basePackages = "com",excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = FeignClientWithoutHystrixConfig.class)})
指定配置类
在FeignClient中指定配置类FeignClientWithoutHystrixConfig
@FeignClient(name = "withoutHystrix",url = "conrad.fake",fallback = FeignClientWithoutHystrix.FallbackThatShouldNotOccur.class,configuration = FeignClientWithoutHystrixConfig.class) public interface FeignClientWithoutHystrix {@RequestMapping(method = RequestMethod.GET, value = "/fake/url")String getFromFakeUrl();@Componentclass FallbackThatShouldNotOccur implements FeignClientWithoutHystrix {private final Logger log = LoggerFactory.getLogger(this.getClass());@Overridepublic String getFromFakeUrl() {log.error("This fallback shouldn't occur");return "Fallback";}}}
3. 验证
不需要熔断降级的接口访问,会直接出现错误
其他的接口会正常进入熔断降级
4. 问题补充
排除扫描不生效的问题
如果是通过ComponentScan排除扫描,但不生效, 这个时候需要检查系统是否有其他地方也配置了ComponentScan进行了同样的目录扫描, 这个时候是会覆盖, 不能有效控制,需要一并排除。
@ComponentScan(basePackages = "com",excludeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = BaseAutoConfiguration.class),@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = FeignClientWithoutHystrixConfig.class)})
FeignClient中指定了配置类, 但仍会进入Hystrix熔断
这个时候需要检查FeignClient名称不能重名, 如果重名,会被覆盖不生效。
备注: 已上传提供源码示例,地址: https://download.csdn.net/download/hxx688/21719912
Feign如何针对单个服务屏蔽Hystrix熔断功能相关推荐
- Hystrix 服务降级和熔断
Hystrix 服务降级和服务熔断 文章目录 Hystrix 服务降级和服务熔断 1.问题的提出 2.Hystrix 3.服务降级 3.1 服务降级实操 3.2 服务降级之客户端 3.3 总结 4.服 ...
- 详解Hystrix熔断机制
什么是hystrix的熔断? hystrix熔断主要是指在一定的时间窗口内,当请求的次数达到一定的失败比率后,hystrix就会主动拒绝服务,采取将请求直接降级等方式,从而有效的缓解了服务雪崩的问题, ...
- Hystrix断路器原理及实现(服务降级、熔断、限流)
Hystrix断路器原理及实现(服务降级.熔断.限流) 分布式系统面临的问题 Hystrix重要概念(面试常考) Hystrix案例 Hystrix 服务提供者 Hystrix 服务消费者 原因与解决 ...
- 微服务之Hystrix降级熔断
前言 分布式系统面临的问题-----服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的微服务,这就是所谓的"扇出".如果扇出的链 ...
- SpringCloud微服务基础 Eureka、Feign、Ribbon、Zuul、Hystrix、配置中心的基础使用
1.单点系统架构 传统项目架构 传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一个项目中. 优点:适合于个人或者小团队开发,不适合大团队开发. 分布式项目架构 根据业务需求进行拆分成N ...
- SpringCloud系列七:Hystrix 熔断机制(Hystrix基本配置、服务降级、HystrixDashboard服务监控、Turbine聚合监控)...
声明:本文来源于MLDN培训视频的课堂笔记,写在这里只是为了方便查阅. 1.概念:Hystrix 熔断机制 2.具体内容 所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝 ...
- 微服务(八)——Hystrix服务降级、熔断、限流(上)
目录 Hystrix服务降级.熔断.限流 Hystrix是什么 Hystrix停更进维 Hystrix的服务降级熔断限流相关概念 Hystrix支付微服务构建 JMeter高并发压测后卡顿 订单微服务 ...
- hystrix 页面_微服务 | 使用Hystrix实现Spring Cloud的熔断机制
1. 熔断机制介绍 在介绍熔断机制之前,我们需要了解微服务的雪崩效应.在微服务架构中,微服务是完成一个单一的业务功能,这样做的好处是可以做到解耦,每个微服务可以独立演进.但是,一个应用可能会有多个微服 ...
- 微服务高可用利器——Hystrix熔断降级原理实践总结
前言 最近在工作中参与组内服务稳定性建设,梳理我们目前服务现状并接入公司自研稳定性保障平台.对公司内自研组件以及业界流行的Hystrix做了学习,Netflix Hystrix 里面大量RxJava响 ...
- Spring Cloud H (五)初战服务降级和熔断Hystrix(豪猪哥)
目录 目录 前言 概述 服务雪崩 服务限流 服务降级 服务熔断 如何理解服务降级和熔断之间的关系 代码实战 Hystrix支付微服务构建 订单微服务调用支付服务出现卡顿 Hystrix之服务降级支付侧 ...
最新文章
- c 语言字符串转二进制,在C ++中将字符串转换为二进制序列
- java 反射 orm_Java-反射机制简介
- 在linux运行math_neon库,linux - 仅使用带交叉编译器的本地库 - 堆栈内存溢出
- oracle 之索引,同义词 ,关键词,视图 ,存储过程,函数,触发器
- 解释抽象类继承实体类的前提是这个实体类必须明确构造函数
- 如何修改计算机无线mac地址,修改计算机mac地址_怎么修改mac地址
- Java 多线程(并发)
- [洪流学堂]Hololens修改图标icon
- AB32VG1开发板学习(2)GPIO,多线程点灯
- 文学杂谈001--《遥远的救世主》
- 学科前沿讲座 神经网络,机器学习,深度学习
- [LetCode-1438] 绝对差不超过限制的最长连续子数组
- 来晚了,秋招五投大厂,成功拿下三家Offer,最终入职美团,分享我的美团1-4面(Java岗)
- 【UNR #6 B】机器人表演(DP)
- 李宏毅机器学习2022 HW1
- 2022考研日语71分自学经验贴;日语可以自学吗?
- 特效转序列帧动画工具
- CTF---Web---SQL注入---04---F12network+XXF伪造+sqlmap跑文件
- YOLOV8:FileNotFoundError: train: No labels found in /home/smy/new-yolov5/ultralytic
- 百度地图 地理位置 转 经纬度 计算两点间的距离
热门文章
- 数据库连接池c3p0
- python微博接口_Python使用新浪微博API发送微博的例子
- java中的关键字有哪些_java关键字有哪些?java关键字大全
- AE插件自动创建图层工具LayerGenerators使用教程
- Dsoframer注册方法
- “为爱尖叫”,爱奇艺的晚会聚能术与商业价值释放场
- linux下gmt4绘制站点分布图,GMT复杂图制作教程———让作图简单的飞起来
- TensorFlow优化模型之正则化
- [译]Selenium —— 怎样使用FireBug和FirePath
- 生成HTML测试报告