天天看点

spring-cloud-feign之spring-cloud-1.3.4(Dalston.SR3)-boot(1.5.6) 学习笔记spring-cloud-feign之spring-cloud-1.3.4(Dalston.SR3)-boot(1.5.6) 学习笔记

spring-cloud-feign之spring-cloud-1.3.4(Dalston.SR3)-boot(1.5.6) 学习笔记

概述

  • 利用EnableFeignClients注解引入FeignClientsRegistrar,FeignClientsRegistrar解析EnableFeignClients与FeignClient注解信息,

    利用FeignClientFactoryBean创建FeignClient标记接口的代理类(以serviceId+FeignClient为alias)

  • FeignAutoConfiguration提供feign级别相应的bean支持,FeignRibbonClientAutoConfiguration提供ribbon-feign级别的bean支持
  • 参考
    • http://blog.csdn.net/undergrowth/article/details/77625767
    • http://blog.csdn.net/undergrowth/article/details/77800470
    • http://blog.csdn.net/undergrowth/article/details/77859293

EnableFeignClients—->引入FeignClientsRegistrar,启用feign相关功能

FeignClientsRegistrar—->解析EnableFeignClients与FeignClient注解信息,注入相关的bean到beanfactory

  • registerDefaultConfiguration—->注册EnableFeignClients上的defaultConfiguration配置
  • registerFeignClients—->解析FeignClient注解
    • registerFeignClient—->利用FeignClientFactoryBean创建feignclient标记的接口的代理实现类

FeignClient—->用于标记接口,表示接口的rest代理类需要创建

  • name/value/url/decode404/configuration/fallback/fallbackFactory
  • type为接口的class信息(在创建接口的代理类时需要使用)

FeignAutoConfiguration

  • 注入FeignContext,用于存放相应的bean信息
  • Targeter—->用于是否使用hystrix作为熔断
    • 当feign.hystrix.HystrixFeign类存在时,注入HystrixTargeter,否则为DefaultTargeter
  • 当无ribbon支持时,即com.netflix.loadbalancer.ILoadBalancer不存在类路径,创建无负载均衡的Client(要么是ApacheHttpClient或者OkHttpClient)

FeignRibbonClientAutoConfiguration—->当ILoadBalancer存在时,加入ribbon支持feign

  • 当beanfactory无Client时,创建LoadBalancerFeignClient,至于是ApacheHttpClient或者OkHttpClient,取决于类路径下类是否存在
  • 注入CachingSpringLoadBalancerFactory,支持负载均衡的缓存

FeignClientsConfiguration—->注入feign级别相关的编解码器、日志工厂、feign生成器

  • Decoder/Encoder/Contract/Feign.Builder/Retryer/FeignLoggerFactory

FeignClientFactoryBean—->根据feignclient解析的信息,以及FeignContext中拥有的bean信息,创建feign代理实现类

  • name/type/fallback/fallbackFactory
  • getObject—->获取代理实现类对象
    • feign—->根据上面配置器配置的bean,从feigncontext中创建Feign.Builder
    • 如果feignclient注解没有配置url参数,则使用loadBalance,创建LoadBalancerFeignClient进行ribbon支持的feign
      • 如果有设置,则使用LoadBalancerFeignClient中实际的要么是ApacheHttpClient或者OkHttpClient进行feign的操作
    • 后续HystrixTargeter.target,如果设置fallback,则targetWithFallback使用HystrixFeign.target创建HystrixInvocationHandler处理器中转处理,
    • 创建feign的hystrixCommand命令完成hystrix支持的feign

测试

  • 示例代码位于– https://github.com/undergrowthlinear/2016MyBookSummary.git