Feign 和 OpenFeign 都是用来进行服务间调用的客户端库,它们旨在简化HTTP API客户端的编写过程,使得编写对外部服务的接口就像调用本地方法一样简单。尽管它们有相似之处,但也存在一些关键差异:
-
归属和演进:
- Feign 最初是由 Netflix 开发的,作为其微服务架构的一部分,用于简化 REST 客户端的创建。
- OpenFeign 是 Spring Cloud 项目中的一个二级子项目,它是基于 Feign 进行了增强和定制,更紧密地与 Spring 生态系统集成。
-
Spring MVC 注解支持:
- Feign 本身并不直接支持 Spring MVC 的注解,如
@RequestMapping
、@GetMapping
、@PostMapping
等。 - OpenFeign 则支持这些 Spring MVC 注解,使得开发者能够利用熟悉的Spring注解风格来定义API接口,提高了代码的一致性和易读性。
- Feign 本身并不直接支持 Spring MVC 的注解,如
-
依赖和使用方式:
- Feign 的依赖通常指
spring-cloud-starter-feign
。 - OpenFeign 使用的依赖是
spring-cloud-starter-openfeign
。 - 在实际应用中,你可能直接使用
spring-cloud-starter-openfeign
来集成 OpenFeign。
- Feign 的依赖通常指
-
功能扩展:
- OpenFeign 提供了更多的功能和灵活性,比如通过 Java SPI (Service Provider Interface) 来选择或自定义 HTTP 客户端实现,以及对超时、重试、熔断器等更多配置选项的支持。
-
负载均衡:
- 两者都内置了 Ribbon 作为客户端负载均衡工具,但在使用和配置上,OpenFeign 由于与Spring Cloud的深度集成,可能提供了更加简便的配置方式。
-
Spring Cloud 代际关系:
- OpenFeign 被视为 Spring Cloud 中服务间调用的第二代解决方案,相对于 Feign,它代表了Spring Cloud团队对服务调用客户端的进一步优化和官方推荐实践。
从上述对比表格可以看出,OpenFeign在支持Spring MVC注解、版本状态、集成Spring Cloud、动态代理、配置与扩展性等方面比Feign有所提升。OpenFeign是Spring Cloud团队在Feign基础上进行的扩展和封装,因此它更好地融入了Spring Cloud生态系统,特别是在Spring Boot 2.0及以上版本中得到了广泛的应用2。
结论是,如果你正在使用Spring Cloud构建微服务架构,建议使用OpenFeign,因为它提供了更好的集成和更多的配置选项,且得到活跃的维护和支持。如果你的项目还在使用较早版本的Spring Cloud,可能需要考虑使用Feign,但应注意Feign可能不会获得未来的更新和维护。
Feign 和 OpenFeign 的区别(简单记忆)
1.支持spring mvc 注解
2.整合了更多的扩展 (请求重试策略、超时控制、请求拦截器)