Skip to content

zhangjun1998/spring-cloud-openfeign

 
 

Repository files navigation

简介

这里是 『香蕉大魔王』 的 spring-cloud-openfeign 源码解析,原始项目地址 在这。 技术暂时还比较拙劣,可能有很多理解不到位或有出入的地方,所以源码注释仅供参考哈,如有错误还请指正,错误很多的话就别说了,请把一些优秀的博客地址贴给我,我爱学习。

目前还没时间总结整体流程,有时间了我再用图文结合的方式把核心流程描述一遍,现在先 mark 一下。

忘记说了,这是 tag 为 v3.1.1 的代码,因为 master 分支代码我下载不了 spring-cloud 还没发布到 maven 的依赖。 然后其中涉及到的一些关于 openfeign 的源码需要移步到 香蕉大魔王的openfeign源码解析 去看,毕竟 spring-cloud-openfeign 只是对它的一个封装。

已看和待看的代码如下:

  • @EnableFeignClients:OpenFeign的启动注解
  • FeignAutoConfiguration:自动注入一些Bean/配置属性,如 FeignContext、Client、Targeter,方便封装成 starter 开箱即用
  • DefaultFeignLoadBalancerConfiguration:用来注入支持负载均衡的客户端
  • FeignClientsRegistrar:注入被@FeignClient修饰的接口代理对象到容器中
  • FeignContext:用于在创建 FeignClient 的过程中提供所需的类实例/资源
  • FeignClientFactoryBean:用于创建 feignClient 的 factoryBen
  • Targeter:用于控制生成何种 feignClient 以及提供实现细节
  • DefaultTargeter:生成默认的代理对象,不支持熔断降级
  • FeignCircuitBreakerTargeter:用于生成支持熔断器的代理对象
  • FeignCircuitBreaker:对熔断器配置的包装,包含了熔断器工厂等引用,可以基于此创建熔断器
    • FeignCircuitBreaker.Builder:继承自 Feign.Builder
  • FeignCircuitBreakerInvocationHandler:生成的代理对象关联的 InvocationHandler,调用对象的任意方法都会被转发到该类进行处理
  • Client:HTTP 客户端
    • FeignBlockingLoadBalancerClient:支持负载均衡的 HTTP 客户端封装,如 Ribbon,它会在执行请求时去注册中心拉取 serviceName 对应的ip:port
    • RetryableFeignBlockingLoadBalancerClient:支持可重试的负载均衡客户端封装,用来支持可重试的负载均衡
  • Targeter:
    • FeignCircuitBreakerTargeter:和 FeignCircuitBreaker 配合,帮助构建熔断降级的客户端
  • Contract:用来解析方法上的注解和一些其它值填充到方法的元数据中
    • SpringMvcContract:spring-cloud-openfeign 对 openfeign 中 Contract 接口的实现,用于适配 Spring MVC 注解,解析出MVC注解表示的数据
    • SpringContract:openfeign 自身提供的对 Spring 注解的适配,但是要引入 feign-spring4 包
  • Encoder 的实现:spring-cloud-openfeign 对 openfeign 中 Encoder 接口的实现,用于HTTP请求编码
    • SpringEncoder
    • SpringPojoFormEncoder
    • PageableSpringEncoder
  • Decoder 的实现:spring-cloud-openfeign 对 openfeign 中 Decoder 接口的实现,用于HTTP响应解码
    • SpringDecoder
    • ResponseEntityDecoder
  • ...

涉及到openfeign的部分代码如下:

  • Feign:Feign 对象的抽象定义,定义了创建 feignClient 对象相关的一些基本操作
    • Feign.Builder:内部类,Feign 对象的构造器
  • ReflectiveFeign:Feign 的子类,可以使用反射创建出接口的代理对象(feignClient)
  • InvocationHandlerFactory:InvocationHandler 的工厂类,用于创建 InvocationHandler,对接口代理对象的方法调用进行拦截,以此实现方法增强
  • ...

联系方式:

如要联系我请备注来意,不知道怎么备注的我提供个模板:「oh,你的 spring-cloud-openfeign 源码解析的太好了,加个好友瞧一瞧」。好,祝大家技术进步,生活快乐。

About

spring-cloud-openfeign 源码解析

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Java 95.8%
  • CSS 4.1%
  • Ruby 0.1%