OpenFeign服务接口调用理解

embedded/2024/12/25 1:39:04/

目录

什么是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 {@Beanpublic 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: truemin-request-size: 2048 #最小触发压缩的大小mime-types: text/xml,application/xml,application/json #触发压缩数据类型response:enabled: true

openfeign日志打印: 

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

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

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

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

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

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

例如:

接口名为:PayFeignApi

那yml配置为:

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

http://www.ppmy.cn/embedded/148490.html

相关文章

Chromium CDP 开发(十):Chromium 中增加自己的Domain

1. 引言 在深入了解了 Chromium CDP&#xff08;Chrome DevTools Protocol&#xff09;的开发过程之后&#xff0c;接下来我们将探讨如何创建一个自定义的 CDP Domain。通过为特定功能创建自己的 CDP Domain&#xff0c;可以避免对已有的 CDP 进行侵入式修改&#xff0c;从而更…

【AI图像生成网站Golang】项目测试与优化

AI图像生成网站 目录 一、项目介绍 二、雪花算法 三、JWT认证与令牌桶算法 四、项目架构 五、图床上传与图像生成API搭建 六、项目测试与优化 六、项目测试与优化 在开发过程中&#xff0c;性能优化是保证项目可扩展性和用户体验的关键步骤。本文将详细介绍我如何使用一…

go字符、字符串等

编码&#xff1a;https://blog.csdn.net/Deft_MKJing/article/details/79460485 go语言没有char。 1. byte uint8&#xff0c;处理ASCII或UTF-8编码的字节&#xff0c;string的单个字符是byte&#xff0c;还可以存储二进制数据&#xff0c;但不是处理二进制数据&#xff0c;处…

Docker的容器编排

目录 1. 什么是容器编排&#xff08;Docker Compose&#xff09;2. 容器编排的功能3. 容器编排文件&#xff08;docker-compose.yml&#xff09;的介绍3.1 文件语法版本3.2 文件基本结构及常见指令 4. Docker Compose命令详解4.1 Docker Compose命令清单4.2 命令格式和常见选项…

HTML中的Vue3解析!

#Vue 3 是一个用于构建用户界面的渐进式 JavaScript 框架。它在 HTML 中发挥着重要的作用&#xff0c;可以让开发者轻松地创建交互式的网页应用。与 HTML 结合时&#xff0c;Vue 3 通过自定义指令、组件等方式增强了 HTML 的功能。# 一、vue的概述 Vue 采用了双向数据绑定机制…

Spring Boot 声明式事务

Spring Boot中的声明式事务管理主要通过Transactional注解来实现。以下是Transactional注解的一些关键用法和特性&#xff1a; 1. 启用事务管理 在Spring Boot应用中使用Transactional注解之前&#xff0c;需要在启动类或者配置类上添加EnableTransactionManagement注解来启用事…

同态加密算法详解及Python实现

目录 同态加密算法详解及Python实现第一部分:同态加密概述与原理1.1 什么是同态加密?同态加密的定义:1.2 同态加密的分类1.3 同态加密的优势与挑战优势挑战第二部分:常见同态加密算法及其应用场景2.1 RSA同态加密支持操作应用场景2.2 Paillier加密支持操作应用场景2.3 Gent…

虚幻引擎游戏开发系列专题-官方编码标准或规约

遵守既定标准和最佳实践来编写可维护的代码。在虚幻游戏引擎中,存在着一些既定的编码标准和约定 ,养成良好的编码规范是写好一份优雅代码的第一步,并且在虚幻官方也强调了,某些编码标准的遵循是强制性的。 编码规约对程序员来说意味着什么 在软件开发中,软件生命周期的80%的成…