当前位置:   article > 正文

Spring Cloud OpenFeign基础入门与使用实践总结

Spring Cloud OpenFeign基础入门与使用实践总结

官网地址:https://docs.spring.io/spring-cloud-openfeign/docs/current/reference/html/#spring-cloud-feign

GitHub地址:https://github.com/spring-cloud/spring-cloud-openfeign

本文SpringCloud版本为:

<spring.boot.version>3.1.7</spring.boot.version>
<spring.cloud.version>2022.0.4</spring.cloud.version>
  • 1
  • 2

【1】概述

OpenFeign是一个声明性web服务客户端。它使编写web服务客户端变得更容易。使用OpenFeign创建一个接口并对其进行注释。它具有可插入的注释支持,包括OpenFeign注释和JAX-RS注释。OpenFeign还支持可插拔编码器和解码器。

Spring Cloud添加了对Spring MVC注释的支持,以及对使用Spring Web中默认使用的HttpMessageConverter的支持。

Spring Cloud集成了Eureka、Spring Cloud CircuitBreaker以及Spring Cloud LoadBalancer,以便在使用OpenFeign时提供负载平衡的http客户端。

与Feign的区别

FeignOpenFeign 都是用于微服务架构中的声明式HTTP客户端,它们允许开发者以一种简单且类型安全的方式来定义HTTP API客户端。然而,它们之间存在一些关键性的区别,主要体现在以下方面:

起源与归属

  • Feign 最初由Netflix开发,是Netflix OSS(Open Source Software)套件的一部分,用于简化客户端对服务端接口的调用,特别适合于Spring Cloud环境。
  • OpenFeign 是Spring Cloud团队在Feign的基础上进行的扩展和封装,以便更好地融入Spring Cloud生态系统,尤其是在Spring Boot 2.0及更高版本中。

依赖管理

  • Feign 使用的依赖是spring-cloud-starter-feign
  • OpenFeign 使用的依赖是spring-cloud-starter-openfeign
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

  • 1
  • 2
  • 3
  • 4
  • 5

注解支持

  • Feign 直接在接口上使用其自身的注解,如@FeignClient@RequestMapping等,但这些注解的使用方式与Spring MVC的注解有所不同。
  • OpenFeign 支持标准的Spring MVC注解,如@GetMapping, @PostMapping等,这使得它可以无缝地集成到Spring MVC的框架中。

版本兼容性

  • Feign 可能在Spring Boot较新版本中支持不佳或需要额外配置,因为它的设计更早,可能没有考虑到Spring Boot后续的变化。
  • OpenFeign 是为了适应Spring Boot 2.0及以后版本的改进而设计的,因此在新的Spring Boot项目中使用更加推荐。

社区支持与更新

  • OpenFeign 作为Spring Cloud官方维护的项目,通常会有更好的文档、示例和社区支持,以及更频繁的更新和bug修复。

总结

OpenFeign可以看作是Feign的进化版本,它修正了一些Feign的不足,并且更加紧密地集成了Spring Boot和Spring Cloud的特性。如果你正在构建一个新的项目或者你正在使用的Spring Boot版本高于2.0,那么使用OpenFeign会是一个更佳的选择。

【2】应用实践

① pom依赖

<!--openfeign-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

② 服务接口

如下所示,接口上面使用@FeignClient注解并指定了远程服务实例名字。

@FeignClient(value = "cloud-payment-service")
public interface PayFeignApi
{
    /**
     * 新增一条支付相关流水记录
     * @param payDTO
     * @return
     */
    @PostMapping(value = "/pay/add")
    ResultData addPay(@RequestBody PayDTO payDTO);
    //...
}    
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

③ 主启动类

这里使用@EnableFeignClients注解

@SpringBootApplication
@EnableDiscoveryClient //该注解用于向使用consul为注册中心时注册服务
@EnableFeignClients//启用feign客户端,定义服务+绑定接口,以声明式的方法优雅而简单的实现服务调用
public class MainOpenFeign80
{
    public static void main(String[] args)
    {
        SpringApplication.run(MainOpenFeign80.class,args);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

如此即可实现服务实例的远程调用,抛弃了RestTemplate+@LoadBalanced,更加优雅简洁。

【3】超时控制

默认OpenFeign客户端等待60秒钟,但是服务端处理超过规定时间会导致Feign客户端返回报错。

① 全局设置

spring:
  cloud:
    openfeign:
      client:
        config:
          default:
            #连接超时时间
            connectTimeout: 3000
            #读取超时时间
            readTimeout: 3000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

② 指定服务实例配置

如下这里为服务实例cloud-payment-service设置为2秒。


spring:
  cloud:
    openfeign:
      client:
        config:
          default:
            #连接超时时间
            connectTimeout: 3000
            #读取超时时间
            readTimeout: 3000
          cloud-payment-service:
            #连接超时时间
            connectTimeout: 20000
            #读取超时时间
            readTimeout: 20000
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/772965
推荐阅读
相关标签
  

闽ICP备14008679号