1. 概述

在本篇文章中,我们将对比 Spring Cloud Netflix FeignSpring Cloud OpenFeign 的主要差异。

2. Feign 简介

Feign 是一个声明式的 HTTP 客户端工具,通过注解方式简化了 Web 服务客户端的编写。我们只需要定义接口,就可以完成客户端的实现。

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

2.1. Spring Cloud Netflix Feign

Spring Cloud Netflix 将 Netflix OSS 中的一系列组件(如 Eureka、Ribbon、Feign 等)整合进了 Spring Cloud 生态系统中。为了方便开发者单独使用 Feign,Spring 提供了对应的 Starter 模块。

2.2. OpenFeign

后来,Netflix 决定不再内部使用 Feign,并停止了它的维护。于是,他们将该项目完全移交给了开源社区,并更名为 OpenFeign

幸运的是,OpenFeign 在社区中获得了极大的支持,持续更新并新增了许多功能。

2.3. Spring Cloud OpenFeign

与前代类似,Spring Cloud OpenFeign 也将 OpenFeign 集成到 Spring Cloud 生态中。

更重要的是,它增加了对 Spring MVC 注解的支持,并提供了与之前相同的 HttpMessageConverters 功能。

接下来,我们将比较 Spring Cloud OpenFeign 与 Spring Cloud Netflix Feign 的具体实现差异。

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 Boot 1.4.7 或更低版本。因此,你的 pom.xml 必须使用兼容的 Spring Cloud 版本。

4. 使用 Spring Cloud Netflix Feign 实现

我们可以使用 @EnableFeignClients 来启用对带有 @FeignClient 注解接口的组件扫描。

对于所有基于 Spring Cloud Netflix Feign 的示例,我们使用的导入语句如下:

import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;

✅ 老版本和新版本的功能实现完全一致。

5. 使用 Spring Cloud OpenFeign 实现

相比之下,我们的 Spring Cloud OpenFeign 教程 包含了与 Netflix Feign 相同的示例。

唯一的不同在于导入包的路径发生了变化:

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

除此之外,其他代码逻辑保持一致 —— 这并不令人意外,毕竟两者之间存在继承关系。

6. 对比总结

从根本上来说,这两种 Feign 实现是相同的。原因很简单:Netflix Feign 是 OpenFeign 的前身。

❌ 但 Spring Cloud OpenFeign 引入了一些新的特性和选项,这些在 Netflix Feign 中是不支持的。

例如,现在可以集成以下组件:

这些都是 Netflix Feign 所不具备的能力。

7. 结论

本文对比了 OpenFeign 和 Netflix Feign 在 Spring Cloud 中的集成方式及其差异。

虽然两者在基础功能上高度一致,但从长远来看,OpenFeign 更具扩展性与生命力,是目前推荐的选择。


原始标题:Differences Between Netflix Feign and OpenFeign | Baeldung