OpenFeign和Feign的区别(微服务间调用简单总结)

本文介绍了OpenFeign与Feign在微服务调用中的异同。相同点在于两者都是用于远程调用的组件,内建了Ribbon进行负载均衡。不同之处在于依赖包不同,OpenFeign支持SpringBoot注解,使用更加灵活。通过添加OpenFeign依赖,配置yml,启用注解,即可实现服务调用。OpenFeign的一个显著特点是接口方法上可添加@RequestMapping,通过JDK动态代理实现服务选择。此外,文章提到了替代方案RestTemplate。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

08年出来做外包,用过Cloud,当时微服务间的相互调用用的还是Feign,其中两年没做过Cloud的项目开发了,重新学了新版本,才知道老一辈那些组件都已经停更了。现在用的都是OpenFeign,简单的理解为Feign的升级版。
区别:

同:
Feign和OpenFeign作用一样,都是进行远程调用的组件。
里面都内置了Ribbon。
都是加在消费端的注解,让消费端可以调用其他生产者的服务。
异:
依赖不同,一个是spring-cloud-starter-feign,一个是spring-cloud-starter-openfeign。
使用方式不同,Feign直接加在接口上并且不支持SpringBoot注解。OpenFeign支持@RequestMapping("/demo/test")这种注解。

OpenFeign简单使用:

(1)加入依赖

		<!--OpenFeign-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>

(2)修改yml配置文件,添加消费者入注册中心,同时开启fetch
在这里插入图片描述

(3)主启动类上面加:@EnableFeignClients
在这里插入图片描述
(4)controller正常写,在调用的service interface 那里加:
在这里插入图片描述
这里的Value,就是服务注册中心的server name,这样就绑定了Feign为该接口会进行哪个server的远程调用。这里有个很突出的特点,可以在接口里的方法加@RequestMapping,这个就是OpenFeign做的一个升级,通过JDK动态代理的方式对该接口进行增强,产生ProxyDemoService代理实现类,根据服务名称从Eureka提供的注册表单中拿到可用的服务节点,再根据Ribbon配置的负载均衡算法去选定某个服务节点开始建立连接,发起调用,解析响应。

不实用Feign做调用也行,那就用RestTemplate。一样能发起请求获得响应,一样能够通过服务名进行轮询,随机或者权重,哈希,自己DIY~

在这里插入图片描述

记录完毕,撤~有写错的或者有更优雅的写法记得@ 我~
### OpenFeignFeign 的主要差异及功能对比 #### 历史背景与发展 最初的 **Feign** 是由 Netflix 开发的一个声明式的 Web Service 客户端,用于简化 HTTP API 调用的过程[^1]。然而随着 Netflix 不再维护其开源项目,社区逐渐接手并将其发展为独立的库——即现在的 **OpenFeign**。尽管两者名称相似,但在实际应用中存在显著的不同。 --- #### 主要差异分析 ##### 1. 维护者与生态支持 - **Netflix Feign**: 这是由 Netflix 提供支持的第一个版本,主要用于内部微服务架构中的 RESTful 接口调用。随着时推移,Netflix 已停止对该项目的进一步开发维护。 - **OpenFeign**: 当前由 GitHub 社区主导维护,作为 Spring Cloud 生态的一部分被广泛采用。它不仅继承了原始 Feign 的核心特性,还增加了许多新功能以满足现代应用程序的需求[^3]。 ##### 2. 功能扩展性 - **Netflix Feign**: 初始设计较为简单,仅提供基本的功能集来完成 HTTP 请求发送的任务。 - **OpenFeign**: 在此基础上进行了大量增强,允许开发者通过 Java SPI(Service Provider Interface)机制来自定义 HTTP 客户端实现方式;同时增强了对超时设置、请求重试逻辑以及熔断处理等方面的支持能力[^2]。 ##### 3. 集成程度 - 对于使用 Spring Boot/Spring Cloud 构建的应用程序来说,“spring-cloud-starter-openfeign”模块完全基于后者构建而成,并且不再依赖任何来自于旧版 Netflix 库的内容[^3]。这意味着如果当前项目选择了最新版本,则实际上是在利用经过改良后的 OpenFeign 版本来执行相关操作而非原来的那个。 ##### 4. 性能优化与抽象层次 - **传统 HTTP 工具 vs OpenFeign**: 相较于手动编写 OkHttp 或 Apache HttpClient 等低级代码片段而言,无论是哪种形式下的 Feign 实现都极大地提高了编码效率并减少了错误发生的可能性。特别是当涉及到复杂的 URL 参数拼接或者 JSON 数据序列化/反序列化的场景时尤为明显[^4]。 --- #### 技术细节探讨 以下是关于二者之一些具体技术层面差别的总结: | 方面 | Netflix Feign | OpenFeign | |--------------------|--------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------| | **维护状态** | 已停更 | 积极活跃 | | **功能丰富度** | 较少 | 更多(如SPI插件体系,高级配置选项) | | **Spring Cloud 支持** | 曾经集成但现在已被废弃 | 成为了官方推荐方案 | | **性能表现** | 取决于底层使用的客户端 | 同样取决于所选的具体实现但提供了更大的灵活性 | 值得注意的是,在某些情况下可能还需要考虑其他因素比如团队熟悉度或者是特定业务需求等因素决定最终选用哪个版本更为合适。 --- ```java // 示例:如何在Spring Cloud 中使用OpenFeign @FeignClient(name = "example-service", url = "http://localhost:8080") public interface ExampleClient { @GetMapping("/api/resource/{id}") String getResourceById(@PathVariable("id") Long id); } ``` 上述代码展示了如何借助注解快速创建一个可以用来访问外部资源的服务接口实例。这种简洁明了的方式正是得益于OpenFeign所提供的强大功能所带来的便利之处之一。 --- ### 结论 综上所述,虽然最初来源于同一个概念技术路线图之上,但由于后续发展方向不同加上各自应用场景有所侧重的缘故使得今天的它们呈现出截然不同的面貌出来。对于大多数新建工程尤其是那些依托于Spring全家桶搭建起来的企业级解决方案来讲显然应该优先考虑采纳更加现代化同时也具备更好兼容性的OpenFeign产品线才是明智之举。 相关问题
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值