专注于Java、Golang、软件架构、项目管理

Back

feign核心组件#

  • Encoder和Decoder:编解码组件。SpringEncoder和ResponseEntityDecoder
  • Contract:解析spring mvc相关组件。SpringMvcContract
  • Feign.Builder:FeignClient的一个实例构造器,builder模式
  • FeignClient:LoadBalancerFeignClient ,底层整合ribbon

feign的使用和自定义配置

@FeignClient(name = “ServiceA”, configuration = MyConfiguration.class)
public interface ServiceAClient {

}

public class MyConfiguration {
@Bean
public RequestInterceptor requestInterceptor() {
return new MyRequestInterceptor();
}

}
java

feign的入口#

  1. @EnableFeignClients,使用FeignClientsRegistrar扫描包下面的所有FeignClient。
  2. 使用SpringMvcContract解析相关spring mvc注解,生成LoadBalancerFeignClient动态代理
  3. FeignClient底层使用ribbon进行负载均衡,调用对应的远程服务

FeignClientFactoryBean就是创建FeignClient组件的工厂

此处获取的Targeter在FeignAutoConfiguration注册

Feign.Builder最后调用build创建ReflectiveFeign实例,调用newInstance方法,使用动态代理创建FeignClient。