OpenFeign服务接口调用理解

目录

什么是openfeign:

feign的处理流程:

openfeign超时控制:

Feign 超时控制概述

 配置:

 全局配置:

指定配置: 

openfeign重试机制:

1. Feign 的重试机制

2. 方法一:启用 Feign 重试机制

3. 方法二: 自定义 Feign 重试机制

openfeign性能优化:

openfeign日志打印: 


什么是openfeign:

openfeign是一个声明式的Web服务客户端,

只需创建一个Rest接口并在该接口上添加注解@FeignClient即可,

OpenFeign基本上就是当前微服务之间调用的事实标准

feign的处理流程:

  • 微服务 A (user-service) 启动时会向 Consul 注册。
  • 微服务 B 需要调用微服务 A,B 配置了 OpenFeign 和 @FeignClient(name = "user-service")
  • B 在调用 UserServiceClient 接口的方法时,Feign 自动发起 HTTP 请求,使用 Consul 中注册的地址和端口去访问微服务 A。
  • 如果微服务 A 崩溃或无法访问,Feign 可以配合 Hystrix 或其他容错机制来处理错误或熔断。

使用 Feign 和服务发现带来以下优势:

  • 动态服务发现:无需手动管理服务地址,自动获取可用实例。
  • 负载均衡:自动选择合适的服务实例进行调用。
  • 简化代码:通过接口和注解的方式,减少 HTTP 请求的手动处理。
  • 解耦和灵活扩展:服务间的调用变得更加松散耦合,易于维护和扩展。
  • 容错和熔断机制:提供更高的容错能力,避免单点故障影响整体系统。

因此,Feign 并不是为了替代直接调用,而是为了解决微服务架构中的许多复杂问题,提供了一种更简洁、健壮和可扩展的服务调用方式。

openfeign超时控制:

超时控制是非常重要的,特别是当微服务间通信的延迟或不可用时,合理的超时设置能够帮助系统提高鲁棒性和性能。

Feign 超时控制概述

  • 连接超时 (Connection Timeout):指的是 Feign 客户端在建立连接时的超时时间。如果在指定的时间内无法与远程服务建立连接,Feign 将抛出连接超时异常。
  • 读取超时 (Read Timeout):指的是 Feign 客户端在成功建立连接后,等待从远程服务获取响应的超时时间。如果在指定时间内没有收到响应,Feign 将抛出读取超时异常。

 配置:

 全局配置:

spring:
  cloud:
    openfeign:
      client:
        config:
          default:
            #
连接超时时间
                      
connectTimeout: 3000
            #
读取超时时间
                     
readTimeout: 3000

指定配置: 

spring:
  cloud:
    openfeign:
      client:
        config:
          cloud-payment-service:
            #连接超时时间
                      
connectTimeout: 5000
            #读取超时时间
                      
readTimeout: 5000

openfeign重试机制:

OpenFeign 默认并不启用重试机制,但可以通过与 Spring Cloud 提供的其他工具结合使用(如 Ribbon、Hystrix、Spring Cloud LoadBalancer)来实现重试机制。Feign 支持重试功能,但它需要进行一定的配置才能生效。下面是关于 OpenFeign 重试机制的详细介绍,包括如何启用和配置。

1. Feign 的重试机制

Feign 的重试机制用于在调用远程服务时发生故障时自动重新尝试请求。通常,重试机制用于临时的网络问题或服务短暂不可用的情况。Feign 默认是不启用重试的,但你可以通过配置启用它,并且可以控制重试的次数、间隔等。

2. 方法一:启用 Feign 重试机制

要启用 Feign 的重试机制,你需要在 application.propertiesapplication.yml 配置文件中进行配置,或通过 Java 配置类进行更细粒度的控制。

application.yml 中启用重试机制:

feign:
  retry:
    enabled: true
  client:
    config:
      default:
        maxRetryAttempts: 3   # 最大重试次数
        retryInterval: 1000   # 重试间隔,单位为毫秒
        maxRetryInterval: 5000 # 最大重试间隔,单位为毫秒

3. 方法二: 自定义 Feign 重试机制

你可以通过实现自定义的重试机制来替换默认的行为。Feign 提供了一个 Retryer 接口,允许你自定义重试策略。你可以自定义重试间隔、最大重试次数等。

在 Feign 配置类中指定自定义的 Retryer

@Configuration
public class FeignConfig {

    @Bean
    public Retryer retryer() {
        return new Retryer.Default(1000, 5000, 3); // 1000ms 重试间隔,最多重试 3 次
    }
}

openfeign性能优化:

 apache.httpcomponents.client5替换openfeign默认的HttpURLConnection:

1. 引入依赖:

<!-- httpclient5-->
<dependency>
    <groupId>org.apache.httpcomponents.client5</groupId>
    <artifactId>httpclient5</artifactId>
    <version>5.3</version>
</dependency>
<!-- feign-hc5-->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-hc5</artifactId>
    <version>13.1</version>
</dependency>

配置开启:

 httpclient:
          hc5:
            enabledtrue
          
#cloud-payment-service:
            #connectTimeout: 4000 #
连接超时时间
                        
#readTimeout: 4000 #读取超时时间 

 openfeign请求回应压缩:

        OpenFeign 支持通过 HTTP 请求和响应进行压缩,通常用于优化网络传输性能,尤其是当传输的数据量较大时。HTTP 请求和响应压缩是通过使用 Content-EncodingAccept-Encoding 头来实现的。你可以通过配置 Feign 请求和响应的压缩方式,减少带宽使用,提高性能。

yml配置:

spring:
  cloud:
    openfeign:
      compression:
        request:
          enabled: true
          min-request-size: 2048 #最小触发压缩的大小
          mime-types: text/xml,application/xml,application/json #触发压缩数据类型
        response:
          enabled: true

openfeign日志打印: 

NONE:默认的,不显示任何日志;

BASIC:仅记录请求方法、URL、响应状态码及执行时间;
HEADERS:除了 BASIC 中定义的信息之外,还有请求和响应的头信息;
FULL:除了 HEADERS 中定义的信息之外,还有请求和响应的正文及元数据。

 在FeignConfig配置类当中,配置日志bean:

@Bean
    Logger.Level feignLogLevel(){
        return Logger.Level.FULL;
    }

在YML中开启日志的Feign客户端:

配置公式(三段):logging.level + 含有@FeignClient注解的完整带包名的接口名+debug

例如:

接口名为:PayFeignApi

那yml配置为:

# feign日志以什么级别监控哪个接口
logging:
  level:
    com:
      atguigu:
        cloud:
          apis:
            PayFeignApi: debug
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值