1、概览 {#1概览}
本文将会带你了解 Spring Cloud Netflix Feign 与 Spring Cloud OpenFeign 之间的区别。
2、Feign {#2feign}
通过 Feign 提供的注解支持,我们只需要定义接口就可以实现 Web 客户端,非常简单。
最初,Feign 由 Netflix 创建并发布,是其 Netflix OSS 项目的一部分。如今,它已成为一个开源项目。
2.1、Spring Cloud Netflix Feign {#21spring-cloud-netflix-feign}
Spring Cloud Netflix 将 Netflix OSS 产品集成到 Spring Cloud 生态系统(全家桶)中。其中包括 Feign、Eureka、Ribbon 以及大量其他工具和实用程序。Feign 被单独定义在一个 Spring Cloud Starter 中,以便只使用 Feign。
2.2、OpenFeign {#22openfeign}
后来,Netflix 决定停止在内部使用 Feign 并停止其开发。根据这一决定,Netflix 将 Feign 完全转移到开源社区的一个名为 OpenFeign 的新项目中。
幸运的是,它继续得到开源社区的大力支持,并推出了许多新功能和更新。
2.3、Spring Cloud OpenFeign {#23spring-cloud-openfeign}
同样,Spring Cloud OpenFeign 将 OpenFeign 项目集成到 Spring Cloud 生态系统中。
这种集成增加了对 Spring MVC 注解的支持,并提供相同的 HttpMessageConverter
。
3、依赖 {#3依赖}
首先,在 pom.xml
文件中添加 spring-cloud-starter-feign 和 spring-cloud-dependencies 依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<versionId>1.4.7.RELEASE</versionID>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR8</version>
<type>pom</type>
<scope>import</scope>
</dependency>
注意,必须使用与 Spring Cloud 兼容版本。
4、Spring Cloud Netflix Feign {#4spring-cloud-netflix-feign}
使用 @EnableFeignClients
对使用 @FeignClient
的接口启用组件扫描。
在使用 Spring Cloud Netflix Feign 项目开发的每个示例中,都使用了以下 import
:
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
所有功能的实现在新旧版本中完全相同。
5、Spring Cloud OpenFeign {#5spring-cloud-openfeign}
相比之下,Spring Cloud OpenFeign 的使用与 Spring Netflix Feign 相同。
唯一的区别是,import
的是不同的包:
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
除此之外,其他都是相同的,这一点并不奇怪,因为这两个库之间存在关联。
6、比较 {#6比较}
从根本上说,这两种 Feign 实现是相同的。可以把这归因于 Netflix Feign 是 OpenFeign 的祖先。
不过,Spring Cloud OpenFeign 包含 Spring Cloud Netflix Feign 中没有的新选项和功能。
7、总结 {#7总结}
本文介绍了 Feign 与 OpenFeign 的历史,以及 Spring Cloud Netflix Feign 与 Spring Cloud OpenFeign 之间的区别。
Ref:https://www.baeldung.com/netflix-feign-vs-openfeign