spring cloud feign

网上资料很多了,在这里mark下 feign源码
原理了解下

  • 启动时,程序会进行包扫描,扫描所有包下所有@FeignClient注解的类,并将这些类注入到spring的IOC容器中。当定义的Feign中的接口被调用时,通过JDK的动态代理来生成RequestTemplate。
  • RequestTemplate中包含请求的所有信息,如请求参数,请求URL等。
  • RequestTemplate声场Request,然后将Request交给client处理,这个client默认是JDK的HTTPUrlConnection,也可以是OKhttp、Apache的HTTPClient等。
  • 最后client封装成LoadBaLanceClient,结合ribbon负载均衡地发起调用。

其实看源码,了解了原理,再看配置就能很快将框架梳理清楚

  • FeignAutoConfiguration feign自动配置类
  • FeignRibbonClientAutoConfiguration 类 feign ribbon 配置
@ConditionalOnClass({ ILoadBalancer.class, Feign.class })
@Configuration
@AutoConfigureBefore(FeignAutoConfiguration.class)
@EnableConfigurationProperties({ FeignHttpClientProperties.class })
//Order is important here, last should be the default, first should be optional
// see https://github.com/spring-cloud/spring-cloud-netflix/issues/2086#issuecomment-316281653
// 这里导入Apache HttpClient  OkHttp3客户端配置及默认是JDK的HTTPUrlConnection
@Import({ HttpClientFeignLoadBalancedConfiguration.class,
		OkHttpFeignLoadBalancedConfiguration.class,
		DefaultFeignLoadBalancedConfiguration.class })
public class FeignRibbonClientAutoConfiguration
  • FeignClientFactoryBean 创建bean代理对象(FeignInvocationHandler为代理对象的处理器), FeignInvocationHandler将请求转发给FeignInvocationHandler

feign和ribbon的负载均衡对比

  1. feign是在feign.SynchronousMethodHandler#executeAndDecode 方法内通过LoadBalancerFeignClient 进行负载均衡
  2. ribbon是通过org.springframework.cloud.client.loadbalancer.LoadBalancerInterceptor#intercept 方法内调用RibbonLoadBalancerClient 进行负载均衡
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值