Netflix Feign 与 OpenFeign

1、概览

本文将会带你了解 Spring Cloud Netflix FeignSpring Cloud OpenFeign 之间的区别。

2、Feign

通过 Feign 提供的注解支持,我们只需要定义接口就可以实现 Web 客户端,非常简单。

最初,Feign 由 Netflix 创建并发布,是其 Netflix OSS 项目的一部分。如今,它已成为一个开源项目。

2.1、Spring Cloud Netflix Feign

Spring Cloud Netflix 将 Netflix OSS 产品集成到 Spring Cloud 生态系统(全家桶)中。其中包括 Feign、Eureka、Ribbon 以及大量其他工具和实用程序。Feign 被单独定义在一个 Spring Cloud Starter 中,以便只使用 Feign。

2.2、OpenFeign

后来,Netflix 决定停止在内部使用 Feign 并停止其开发。根据这一决定,Netflix 将 Feign 完全转移到开源社区的一个名为 OpenFeign 的新项目中。

幸运的是,它继续得到开源社区的大力支持,并推出了许多新功能和更新。

2.3、Spring Cloud OpenFeign

同样,Spring Cloud OpenFeign 将 OpenFeign 项目集成到 Spring Cloud 生态系统中。

这种集成增加了对 Spring MVC 注解的支持,并提供相同的 HttpMessageConverter

3、依赖

首先,在 pom.xml 文件中添加 spring-cloud-starter-feignspring-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

使用 @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

相比之下,Spring Cloud OpenFeign 的使用与 Spring Netflix Feign 相同。

唯一的区别是,import 的是不同的包:

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.EnableFeignClients;

除此之外,其他都是相同的,这一点并不奇怪,因为这两个库之间存在关联。

6、比较

从根本上说,这两种 Feign 实现是相同的。可以把这归因于 Netflix Feign 是 OpenFeign 的祖先。

不过,Spring Cloud OpenFeign 包含 Spring Cloud Netflix Feign 中没有的新选项和功能。

7、总结

本文介绍了 Feign 与 OpenFeign 的历史,以及 Spring Cloud Netflix Feign 与 Spring Cloud OpenFeign 之间的区别。


Ref:https://www.baeldung.com/netflix-feign-vs-openfeign