Feign原理

189 阅读1分钟

1.Feign远程调用的基本流程

image.png

(1)在微服务启动时,Feign会进行包扫描,对加@FeignClient注解的接口,按照注解的规则,创建远程接口的本地JDK Proxy代理实例。然后,将这些本地Proxy代理实例,注入到Spring IOC容器中。当远程接口的方法被调用,由Proxy代理实例去完成真正的远程访问,并且返回结果。

(2)JDK Proxy动态代理实例的真正的方法调用过程,具体是通过 InvokeHandler 调用处理器完成的。其invoke(…)方法主要是通过内部成员feign客户端成员 client,完成远程 URL 请求执行和获取远程结果(通过负载均衡机制,定位到合适的远程server服务器,然后再完成真正的远程URL请求)。

1:首先通过@EnableFeignCleints注解开启FeignCleint
2:根据Feign的规则实现接口,并加@FeignCleint注解
3:程序启动后,会进行包扫描,扫描所有的@FeignCleint的注解的类,并将这些信息注入到IoC容器中
4:当接口的方法被调用,通过JDK的代理,来生成具体的RequestTemplate
5:RequestTemplate再生成调用的Request
6:Request交给Client去处理,其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp
7:最后Client被封装到LoadBalanceClient类,这个类结合类Ribbon做到了负载均衡,真正发送请求出去