Feign 和 OpenFeign 的区别(精简记忆版)?
1.支持spring mvc 注解
2.整合了更多的扩展 (请求重试策略、超时控制、请求拦截器)
详细版:
起源与归属:
- Feign:最初由 Netflix 开发,是 Netflix OSS(Open Source Software)套件的一部分,用于简化客户端对服务端接口的调用,尤其适用于 Spring Cloud 环境。
- OpenFeign:Spring Cloud 团队在 Feign 的基础上进行了扩展和封装,将其整合到 Spring Cloud 生态中,形成了 OpenFeign。因此,OpenFeign 可以看作是 Feign 的一个 Spring Cloud 官方支持版本。
与 Spring MVC 的集成:
- Feign:原生的 Feign 并不直接支持 Spring MVC 的注解,如
@RequestMapping
、@GetMapping
、@PostMapping
等。 - OpenFeign:OpenFeign 显著的特点是对 Spring MVC 注解的支持,开发者可以直接使用熟悉的 Spring MVC 注解来定义接口,增强了与 Spring 体系的融合度,降低了学习成本。
- Feign:原生的 Feign 并不直接支持 Spring MVC 的注解,如
配置与扩展性:
- Feign:虽然提供了基本的负载均衡支持(通常通过内置的 Ribbon 实现),但其配置选项和扩展性相对有限。
- OpenFeign:在 Feign 的基础上增加了更多配置选项,如超时设置、重试策略、熔断器(如与 Hystrix 集成)等,增强了服务调用的稳定性和容错能力。此外,OpenFeign 支持更丰富的扩展,如日志记录、监控、安全性增强等,便于与 Spring Cloud 生态中的其他组件如 Sleuth、Zuul、Eureka 等更好地集成。
使用便捷性:
- OpenFeign:由于紧密集成于 Spring Cloud,OpenFeign 可以利用 Spring 的自动配置和依赖注入机制,简化了配置和使用过程。开发者只需添加适当的注解和依赖,即可快速启用 OpenFeign 功能,无需手动创建和配置 Feign 客户端实例。
总结来说,OpenFeign 是对 Feign 的一次升级和优化,特别是在与 Spring 生态系统的集成、易用性、扩展性和配置灵活性方面做了显著改进。对于使用 Spring Cloud 构建微服务的项目来说,OpenFeign 通常是首选,因为它提供了更好的 Spring 兼容性和更为全面的功能集。而原始的 Feign 可能更适合那些不需要深度集成 Spring 或寻求更轻量级解决方案的项目。