Spring Cloud openFeign学习【3.0.2版本】

133 阅读4分钟

前言

​ 内容分为openFeign大致的使用和源码的个人解读,里面参考了不少其他优秀博客作者的内容,很多地方基本算是拾人牙慧了,不过还是顺着源码读了一遍加深理解。

openFeign 是什么?

​ Feign是一个声明性web服务客户端。它使编写web服务客户机更加容易,要使用Feign,需要创建一个接口并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。

​ Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注解的支持,并支持使用Spring Web中默认使用的相同HttpMessageConverters。

​ Spring Cloud集成了Eureka、Spring Cloud CircuitBreaker和Spring Cloud LoadBalancer,在使用Feign时提供一个负载均衡的http客户端

如何学习?

​ 框架最大的意义在于使用,其实最好的教程就是边做边参考官方的文档学习。

官方文档目录地址

官方openFeign的文档

应用场景?

​ 可以看到openFeign作为服务的调用中转,负责服务之间的连接和请求转发的操作。OpenFeign作为编写服务调用支持组件在spring cloud中占有极为重要的位置。

​ 和RPC的通信框架不同,openFeign使用了传统的http作为传输结构。

​ 在以往使用Ribbon的时候,服务调用通常使用的是手动调用,这需要花费大量的人工协调时间。现在通过openFeign把服务调用“本地化”。调用其他的服务的接口API像调用本地方法一样。这样既不需要频繁的改动接口,又可以控制服务的调用,而不会导致服务提供方的变动而“失效”。

Ribbon、Feign和OpenFeign的区别

Ribbon、Feign和OpenFeign的区别

Ribbon

​ Ribbon 是 Netflix开源的基于HTTP和TCP等协议负载均衡组件

​ Ribbon 可以用来做客户端负载均衡,调用注册中心的服务

​ Ribbon的使用需要代码里手动调用目标服务,请参考官方示例:官方示例

Feign

​ Feign是Spring Cloud组件中的一个轻量级RESTful的HTTP服务客户端。

​ Feign内置了Ribbon,用来做客户端负载均衡,去调用服务注册中心的服务

​ Feign的使用方式是:使用Feign的注解定义接口,调用这个接口,就可以调用服务注册中心的服务。

​ Feign支持的注解和用法请参考官方文档:官方文档

​ Feign本身不支持Spring MVC的注解,它有一套自己的注解

OpenFeign

​ OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等等。OpenFeign的@FeignClient可以解析SpringMVC的 @RequestMapping注解下的接口,并通过动态代{过}{滤}理的方式产生实现类,实现类中做负载均衡并调用其他服务。

​ 根据上面的描述,绘制如下的表格内容:

-RibbonFeignOpenFeign
使用方式手动调用目标服务Feign的注解定义接口,调用接口就可以调用注册中心服务可以直接使用服务调用的方式调用对应的服务
作用客户端负载均衡,服务注册中心的服务调用客户端负载均衡,服务注册中心的服务调用动态代{过}{滤}理的方式产生实现类,实现类中做负载均衡并调用其他服务
开发商NetfixSpring CloudSpring Cloud
特点基于HTTP和TCP等协议负载均衡组件轻量级RESTful的HTTP服务客户端。依靠自我实现的注解进行请求处理支持了Spring MVC的注解的轻量级RESTful的HTTP服务客户端
目前情况维护中停止维护维护中

openFeign增加了那些功能:

  1. 可插拔的注解支持,包括Feign注解和JSX-RS注解。
  2. 支持可插拔的HTTP编码器和解码器。
  3. 支持Hystrix和它的Fallback。
  4. 支持Ribbon的负载均衡。
  5. 支持HTTP请求和响应的压缩。

openFeign的client实现方替换:

  1. 可以使用http client 替换,并且openFeign 提供了良好的配置,可以支持httpclient的细节化配置。
  2. 使用okHttpClient, 可以实现 okhttpClient 实现自定义的httpclient注入模式,但是会出现一定的问题。