springcloud 微服务组件 Fegin 之源码分析(十六)

今天分析Fegin 组件源码及原理,首先,Fegin是对Hystrix和Rebbon的封装:开始,fegin只有接口没有实现类,实现原理类似Mybatis,运行时生成了代理类,相当于实现类。

1、从启动类入口:

 2、点击 FeignClientsRegistrar 里面有创建beanDefinition对象,

点击  registerFeignClients 方法:扫描FeignClient 注解,并遍历相关的包和类,封装成对象

 对应的业务代码注解和

注册对象方法: 

扫描二维码关注公众号,回复: 12885238 查看本文章

 3、点击 FeignClientFactoryBean  找到getObject方法,生成代理类

4、进入HystrixTargeter 类 

5、生成JDK类型的代理类:

 点击create方法:

6、点击  发现是JDK的动态代理:

6、启动时断点看:

最终会生成有@FeignClient 注解的接口的代理 所以 Controller 中获取到代理实例后,则会掉到 HystrixInvocationHandler invoke 方法,后面会详细介绍此代理类:

调用接口时证明是代理类: 

然后会调用到这:

7、进入代理类 HystrixInvocationHandler implements InvocationHandler 类:

 还是走的 hystrix 那一套,最后会走到上面的 run 钩子方法中

 8、来到了相似的地方,上篇分析Hystrix是出现过

9、到了集成Rebbon的地方:

 10、进入LoadBalancerFeignClient

点击lbClient

11、 rebbon源码中有这部分

 

 12、拿到服务列表ip 和 重试次数等重要参数:

13、返回调用  executeWithLoadBalancer

14、发送http请求:

到这里流程结束,大家参考这个思路读取Fegin源码,多读多思考,下篇我们分析zuul源码,敬请期待!

猜你喜欢

转载自blog.csdn.net/nandao158/article/details/108503959