

Spring Cloud Alibaba Sentinel 对 Feign 的支持
source link: https://www.tuicool.com/articles/fQvY3iy
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Spring Cloud Alibaba Sentinel 除了对 RestTemplate 做了支持,同样对于 Feign 也做了支持,如果我们要从 Hystrix 切换到 Sentinel 是非常方便的,下面来介绍下如何对 Feign 的支持以及实现原理。
集成 Feign 使用
spring-cloud-starter-alibaba-sentinel 的依赖还是要加的,如下:
需要在配置文件中开启 sentinel 对 feign 的支持:
然后我们定义自己需要调用的 Feign Client:
定义 fallback 类 UserFeignClientFallback:
测试代码:
你可以将这个 Client 对应的 user-service 停掉,然后就可以看到输出的内容是 "fallback"
如果要对 Feign 调用做限流,资源名称的规则是精确到接口的,以我们上面定义的接口来分析,资源名称就是GET:http://user-service/user/get,至于资源名称怎么定义的,接下面的源码分析你就知道了。
原理分析
首先看SentinelFeignAutoConfiguration中如何自动配置:
@ConditionalOnProperty 中 feign.sentinel.enabled 起了决定性作用,这也就是为什么我们需要在配置文件中指定 feign.sentinel.enabled=true
。
接下来看 SentinelFeign.builder 里面的实现:
build方法中重新实现了super.invocationHandlerFactory方法,也就是动态代理工厂,构建的是InvocationHandler对象。
build中会获取Feign Client中的信息,比如fallback,fallbackFactory等,然后创建一个SentinelInvocationHandler,SentinelInvocationHandler继承了InvocationHandler。
SentinelInvocationHandler中的invoke方法里面进行熔断限流的处理。
总结
总的来说,这些框架的整合都有相似之处,前面讲RestTemplate的整合其实和Ribbon中的@LoadBalanced原理差不多。
这次的Feign的整合其实我们从其他框架的整合也是可以参考出来的,最典型的就是Hystrix了。
我们想下Hystrix要对Feign的调用进行熔断处理,那么肯定是将Feign的请求包装了HystrixCommand。
同样的道理,我们只要找到Hystrix是如何包装的,无非就是将Hystrix的代码换成Sentinel的代码而已。
InvocationHandlerFactory是用于创建动态代理的工厂,有默认的实现,也有Hystrix的实现feign.hystrix.HystrixFeign。
上面这段代码是不是跟Sentinel包装的类似,不同的是Sentinel构造的是SentinelInvocationHandler ,Hystrix构造的是HystrixInvocationHandle。在HystrixInvocationHandler的invoke方法中进行HystrixCommand的包装。
加入星球特权

1、从前端到后端玩转Spring Cloud
2、实战分库分表中间件Sharding-JDBC
3、实战分布式任务调度框架Elastic Job
4、配置中心Apollo实战
5、高并发解决方案之缓存
6、更多课程等你来解锁,20+课程
Recommend
-
47
最近管点闲事浪费了不少时间,感谢网友 libinwalan 的留言提醒。及时纠正路线,继续跟大家一起学习Spring Cloud Alibaba。 Nacos作为注册中心和配置中心的基础教程,到这里先告一段落,后续与其他结合的内容等讲...
-
42
通过上一篇 《使用Sentinel实现接口限流》 的介绍,相信大家对Sentinel已经有了初步的认识。在Spring Cloud Alibaba的整合封装之下,接口限流这件事情可以非...
-
24
-
47
-
28
-
38
随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel 具有以下特征: 丰富的应用场景: Sentinel...
-
15
Spring Cloud Alibaba Sentinel 流量卫兵
-
5
Sentinel整合Feign对远程调用限流并降级 推荐 原创 梁云亮 2022-10-14 11:15:48
-
7
Spring Cloud Alibaba组件之Sentinel 目录
-
4
Spring Cloud Alibaba 系列之 Sentinel(服务容错)在微服务架构中,我们将业务拆分成一个个的服务,服务与服务之间可以相互调用,但是由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如果单个服务出现问题,调用这个服务就会出现网络延迟,此...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK