友情提示:如果你对 Feign 不是很了解,请先阅读 Feign 如何进行服务间调用
相关版本:Spring Boot 2.1.5.RELEASE 、Spring Cloud Greenwich.SR
回顾
在 Feign 如何进行服务间调用 一文中,提到了Feign 自动配置类 FeignAutoConfiguration。
在之前提到,Feign 对象进行实例化的时候会调用 Targeter targeter = get(context, Targeter.class); 来进行获取。
Targeter 有两种实现: DefaultTargeter 和 HystrixTargeter。
Feign 如何进行服务间调用 中我们以 DefaultTargeter 进行展开。而在 Feign Hystrix Support 中,通过查看自动配置类 FeignAutoConfiguration 信息,在有 Hystrix 相关依赖情况下,Feign Targeter 的实现为 HystrixTargeter。
Feign Hystrix Support
Spring Cloud 官网相关案例信息
回顾熟悉一下 Feign 的使用
源码分析 HystrixTargeter 配置下的 Feign Client 代理对象
聚焦 Feign 自动配置类 FeignAutoConfiguration
public class FeignAutoConfiguration {
@Configuration
@ConditionalOnMissingClass("feign.hystrix.HystrixFeign")
protected static class DefaultFeignTargeterConfiguration {
@Bean
@ConditionalOnMissingBean
public Targeter feignTargeter() {
return new DefaultTargeter();
}
}
@Configuration
@ConditionalOnClass(name = "feign.hystrix.HystrixFeign")
protected static class HystrixFeignTargeterConfiguration {
@Bean
@ConditionalOnMissingBean
public Targeter feignTargeter() {
return new HystrixTargeter();
}
}
}
从自动配置类 FeignAutoConfiguration 中,我们可以很直观的看到,当我们在依赖中引入 feign-hystrix 和 hystrix 时,Feign 会采用 HystrixTargeter作为其 Targeter 的实现类。
Feign Hystrix 功能支持,由 HystrixTargeter#target 实例化对象时生成一系列HystrixCommand 相关配置。
提示:Feign Client 的加载可以分为三步。HystrixTargeter#target 的调用属于第二步:Feign Client 实例化代理对象。
聚焦 HystrixTargeter#target
class HystrixTargeter implements Targeter {
@Override
public <T> T target(FeignClientFactoryBean factory, Feign.Builder feign,
FeignContext context, Target.HardCodedTarget<T> target) {
// 1、判定是否引入依赖 feign-hystirx
if (!(feign instanceof feign.hystrix.HystrixFeign.Builder