Feign集成Hystrix源码分析以及扩展

前言
在《Hystrix源码浅析》中分析过request cache的相关源码实现,而在Feign中集成了 RibbonHystrix两个重要组件,但很遗憾其默认设计中并没有对hystrix request cache的实现。故而本章节将从源码出发,了解Feign是如何集成Hystrix组件的,以便后续我们扩展Hystrix在Feign中的应用。正文部分将分为4个阶段分析,为何是4个阶段呢,看了就明白啦。


正文

第一阶段
直接切入正题,找到 FeignClient的自动配置类 FeignClientsConfiguration,编解码器均在当前配置类中设定,我们关注的feign(此处 Feign.Builder最终将帮助我们创建feign实例)客户端定义如下

如上图,可以看到其中有一个内部类 HystrixFeignConfiguration,其注册有两个条件:
  • 在classpath中找到HystrixCommandHystrixFeign类;
  • 同时在feignHystrixBuilder方法上可以看到其还需要feign.hystrix.enabled配置为true(如果没有配置,默认值为false);
只有满足了以上两个条件的,方会注册含有ystrix的feign客户端实例,在一个应用中我们会定义多个feignClient,我们需要设定Bean的 scopeprototype
反之,如果没有同时满足上述两个条件,将会默认注册一个常规的 FeignBuilder实例。
在源码中还有 FeignAutoConfiguration作为feign的自动配置,

红色框中已经标出了重点,很明显两个自动装配过程通过“ feign.hystrix.HystrixFeign”类是否在classpath中作为判断依据形成了一个互斥约定,贴合本章重点,我们已经加入了Hystrix相关的依赖,故其会自动装配 HystrixTargeter实例。进入 HystrixTargeter类中,其核心实现在 target方法中,

通过4个红色框标记了我们需要分析的四点:
  • 根据之前的分析,我们当前装载的builderHystrixFeign.builder,可直接转型;
  • 先记住此处的setterfactory设定,其将在构造HystrixCommand时起到关键作用,如下是一个Default实现:

在Feign类中定义了生成 commandKey的实现,其主要依据 feignclient实例和method生成,由‘类名称#方法名+参数列表中参数类型’组成;
  • 优先获取FeignClientFactoryBeanfallback定义,如果获取到则直接通过fallback定义类生成包含回退方法的feignClient代理;
  • 如果没有定义
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值