14.OpenFeign 源码分析(springcloud)

5.1 OpenFeign 的原理是什么?
根据上面的案例,我们知道 feign 是接口调用,接口如果想做事,必须要有实现类
可是我们并没有写实现类,只是加了一个 @FeignClient(value= xxx-service ) 的注解
所以我们猜测 feign 帮我们创建了代理对象,然后完成真实的调用。
动态代理 1jdk
invoke 2cglib 子类继承的
1. 给接口创建代理对象(启动扫描)
2. 代理对象执行进入 invoke 方法
3. invoke 方法里面做远程调用
具体我们这次的流程:
A. 扫描注解得到要调用的服务名称和 url
B. 拿到 provider-order-service/doOrder ,通过 ribbon 的负载均衡拿到一个服务, provider-order-service/doOrder--- http://ip:port/doOrder
C. 发起请求,远程调用
5.2 看看 OpenFeign 的内部是如何实现这些的
5.2.1 如何扫描注解 @FeignClient
查看启动类的 @EnableFeignClients

进入 FeignClientsRegistrar 这个类 去查看里面的东西

 

 

真正的扫描拿到注解和服务名称

 

5.2.2 如何创建代理对象去执行调用?
当我们启动时,在 ReflectiveFeign 类的 newInstance 方法,给接口创建了代理对象

当我们执行调用的时候,打个断点去查看

 

ReflectiveFeign 类中的 invoke 方法帮我们完成调用

 

SynchronousMethodHandler invoke 中给每一个请求创建了一个 requestTemplate 象,去执行请求

executeAndDecode

 

我们去看 LoadBalancerFeignClient execute 方法

 

executeWithLoadBalancer 继续往下看

 

 

 

只要是 feign 调用出了问题
feign 包下面的 Client 接口下面的 108
200 成功
400 请求参数错误
401 没有权限
403 权限不够
404 路径不匹配
405 方法不允许
500 提供者报错了
302 资源重定向

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

做一道光

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值