SpringCloudRPC远程调用核心原理:Feign弹性RPC客户端的重要组件,腾讯java面试有几轮

本文详细解析了SpringCloud Feign中的动态代理原理,重点介绍了FeignInvocationHandler调用处理器和MethodHandler方法处理器的角色与功能。FeignInvocationHandler通过dispatch映射管理RPC方法处理器,而MethodHandler则负责实际的HTTP请求和响应处理。文中还提到了Feign的客户端组件,如默认的Client.Default,以及如何通过ApacheHttpClient和OkHttpClient增强HTTP请求性能。
摘要由CSDN通过智能技术生成

*/

@RequestMapping(value = “/echo/{word}/v1”,

method = RequestMethod.GET)

RestOut echo(

@PathVariable(value = “word”) String word);

}

注意,DemoClient远程调用接口加有@FeignClient注解,Feign在启动时会为带有@FeignClient注解的接口创建一个动态代理RPC客户端实例,并注册到Spring IOC容器,如图3-12所示。

SpringCloudRPC远程调用核心原理:Feign弹性RPC客户端的重要组件

图3-12 远程调用接口DemoClient的动态代理RPC客户端实例

DemoClient的本地JDK动态代理实例的创建过程比较复杂,稍后将作为重点介绍。先来看另外两个重要的Feign逻辑组件——调用处理器和方法处理器。

Feign的调用处理器InvocationHandler

=============================

大家知道,通过JDK Proxy生成动态代理类的核心步骤就是定制一个调用处理器。调用处理器实现类需要实现JDK中位于java.lang.reflect包中的InvocationHandler调用处理器接口,并且实现该接口的invoke(…)抽象方法。

Feign提供了一个默认的调用处理器,名为FeignInvocationHandler类,该类完成基本的调用处理逻辑,处于feign-core核心JAR包中。当然,Feign的调用处理器可以进行替换,如果Feign是与Hystrix结合使用的,就会被替换成HystrixInvocationHandler调用处理器类,而该类处于feign-hystrix的JAR包中。

以上两个Feign调用处理器都实现了JDK的InvocationHandler接口,如图3-13所示。

SpringCloudRPC远程调用核心原理:Feign弹性RPC客户端的重要组件

图3-13 两个Feign的InvocationHandler调用处理器示意图

默认的调用处理器FeignInvocationHandler是一个相对简单的类,有一个非常重要的Map类型成员dispatch映射,保存着RPC方法反射实例到Feign的方法处理器MethodHandler实例的映射。

在演示示例中,DemoClient接口的JDK动态代理实现类的调用处理器FeignInvocationHandler的某个实例的dispatch成员的内存结构图如图3-14所示。

SpringCloudRPC远程调用核心原理:Feign弹性RPC客户端的重要组件

图3-14 一个运行时FeignInvocationHa

《一线大厂Java面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》

【docs.qq.com/doc/DSmxTbFJ1cmN1R2dB】 完整内容开源分享

ndler调用处理器实例的 dispatch成员的内存结构图

DemoClient的动态代理实例的调用处理器FeignInvocationHandler的dispatch成员映射中有两个键-值对(Key-Value Pair):一个键-值对缓存的是hello方法的方法处理器实例;另一个键-值对缓存的是echo方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值