前言
OpenFeign本质上是一个使用动态代理技术,使用户可以面向接口开发的基于Http协议的Rpc通信框架,最近一个月的文章都在分析OpenFeign,之前9篇文章已经分析了OpenFeign的整个执行链路涉及到的核心组件,本文将OpenFeign核心知识做一次汇总总结。
1、面试官:OpenFeign十大可扩展组件你知道哪些?
2、OpenFeign第一个可扩展组件通信Client详解
3、OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
4、OpenFeign集成Ribbon负载均衡-过滤和选择服务核心实现
5、OpenFeign重试组件Retryer原理
6、OpenFeign请求拦截器组件RequestInterceptor原理与使用场景
7、OpenFeign日志组件Logger原理与应用
8、OpenFeign是如何识别RequestMapping注解的?
9、Ribbon的超时配置会覆盖OpenFeign的超时配置吗
核心知识一 OpenFeign执行流程
如下图,OpenFeign核心流程中包含从参数解析开始到发起通信,最后到响应解码,其中最核心的能力是通信
,在通信能力基础之上,提供了负载均衡,请求拦截,请求参数转换,响应解码,重试
的能力。
核心知识二 参数解析
在Spring或者SpringBoot项目中,我们一般使用下面的形式定义OpenFeign的Client
@FeignClient(name = "fox-server", url = "http://127.0.0.1")
public interface FeignClientApi {
@RequestMapping(path = "/get")
String getName(@RequestParam(name = "name") String name);
}
通过SpringMvc注解也能实现OpenFeign通信的能力,是因为OpenFeign有Constract
规范并且对SpringMvc注解进行了解析实现,使得SpringMvc用户可以无缝使用OpenFeign。
OpenFeign不仅支持自身的注解,也对Spring Mvc注解进行了增强,支持解析SpringMvc部分注解。
核心知识三 负载均衡能力
OpenFeign借助Ribbon实现负载均衡。能够动态从配置文件或者远程注册中心拉取服务列表。
核心知识四 请求拦截器
OpenFeign拦截器可以实现修改请求头,请求参数的目的,达到公用参数传递或者统一压缩,加解密的目的
public interface RequestInterceptor {
void apply(RequestTemplate template);
}
核心知识五 重试器
OpenFeign捕获RetryableException
异常支持重试,重试次数为最大重试次数-1
核心知识六 OpenFeign可扩展性能力强
在OpenFeign整个执行流程中涉及到的组件,几乎都可以被覆盖,也就是能够自定义扩展,只要实现他的接口即可。比如最底层的通信Client组件,也可以在Okhttp,httpclient之间切换。
扩展性这点不得不服,真正做到了对扩展开放对修改关闭,你能想到的扩展点都支持。