【SpringCloud】OpenFeign高级特性

embedded/2024/9/25 4:35:18/

【SpringCloud】OpenFeign高级特性

文章目录

  • 【SpringCloud】OpenFeign高级特性
    • 1. 超时控制
      • 1.1 全局配置
      • 1.2 指定配置
    • 2. 重试机制
    • 3. 替换Http客户端
      • 3.1 引入依赖
      • 3.2 配置
    • 4. 请求/响应压缩
    • 5. 日志打印
    • 6. 综合配置

1. 超时控制

image-20240425215227490

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

为了避免这样的情况,有时候我们需要设置Feign客户端的超时控制,默认60秒太长或者业务时间太短都不好


1.1 全局配置

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

1.2 指定配置

如果A服务想让B服务的超时时间为2s,C服务想让B服务的超时时间为1s,那么全局配置就合适了,应该使用指定配置。

在服务消费方配置文件中根据调用服务名进行配置:

spring:openfeign:client:config:#default:#连接超时时间#connectTimeout: 3000#读取超时时间#readTimeout: 3000#服务名cloud-payment-service:#连接超时时间connectTimeout: 1000#读取超时时间readTimeout: 1000

注意:如果全局配置和指定配置同时存在,则以指定配置为主。


2. 重试机制

OpenFeign 的重试机制默认是关闭的,需要手动开启。

新建如下配置类:

@Configuration
public class FeignConfig {@Beanpublic Retryer myRetryer() {//return Retryer.NEVER_RETRY; //Feign默认配置是不走重试策略的//最大请求次数为3(1+2),初始间隔时间为100ms,重试间最大间隔时间为1sreturn new Retryer.Default(100, 1, 3);}
}

由于先前配置了超时时间为1s,所以重试之后的时间为3s:

image-20240425222202476


3. 替换Http客户端

OpenFeign中 http client 如果不做特殊配置,OpenFeign默认使用JDK自带的 HttpURLConnection 发送HTTP请求,由于默认HttpURLConnection没有连接池、性能和效率比较低,所以我们采用阿帕奇的Http客户端替换掉它。


3.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>

3.2 配置

#  Apache HttpClient5 配置开启
spring:cloud:openfeign:httpclient:hc5:enabled: true

4. 请求/响应压缩

对请求和响应进行GZIP压缩,Spring Cloud OpenFeign支持对请求和响应进行GZIP压缩,以减少通信过程中的性能损耗。

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

5. 日志打印

OpenFeign 提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解 Feign 中 Http 请求的细节。

OpenFeign 日志有四个级别:

  • NONE:默认的,不显示任何日志。
  • BASIC:仅记录请求方法、URL、响应状态码及执行时间
  • HEADERS:除了 BASIC 中定义的信息之外,还有请求和响应的头信息
  • FULL:除了 HEADERS 中定义的信息之外,还有请求和响应的正文及元数据。

开启日志打印步骤如下:

1)创建配置类:

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

2)yml配置:

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

注意:公式为:logging.level + 含有@FeignClient注解的完整带包名的接口名 + debug


6. 综合配置

server:port: 80spring:application:name: cloud-consumer-openfeign-ordercloud:consul:host: localhostport: 8500discovery:prefer-ip-address: true #优先使用服务ip进行注册service-name: ${spring.application.name}openfeign:client:config:default:#连接超时时间connectTimeout: 3000#读取超时时间readTimeout: 3000cloud-payment-service:#连接超时时间connectTimeout: 1000#读取超时时间readTimeout: 1000httpclient:hc5:enabled: truecompression:request:enabled: truemin-request-size: 2048 #最小触发压缩的大小mime-types: text/xml,application/xml,application/json #触发压缩数据类型response:enabled: true# feign日志以什么级别监控哪个接口
logging:level:com:zhj:cloud:apis:PayFeignApi: debug

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

相关文章

玩转Virtual Box虚拟机

玩转Virtual Box虚拟机 虚拟化技术和虚拟机简介 什么是虚拟化技术&#xff1f; 虚拟化技术是将计算机的各种硬件资源予以抽象、转换、分割、组合的一种计算机技术。虚拟化技术打破了实体结构间不可切割的障碍&#xff0c;从而使用户可以按照需求重新组合硬件资源&#xff0c…

磨损对输送带安全的影响

磨损对输送带安全的影响 在工业生产中&#xff0c;输送带作为重要的物流传输设备&#xff0c;广泛应用于煤炭、化工、冶金、电力、建材等多个行业。然而&#xff0c;输送带在使用过程中不可避免地会出现磨损现象&#xff0c;这不仅会影响其使用寿命&#xff0c;还可能对生产安…

如何配置nginx的转发?

配置Nginx的转发可以通过修改Nginx的配置文件来实现。以下是配置Nginx转发的基本步骤&#xff1a; 打开Nginx的配置文件&#xff0c;通常位于/etc/nginx/nginx.conf或/usr/local/nginx/conf/nginx.conf。 在http块中添加一个新的server块&#xff0c;用于配置转发目标的基本信…

VSCode 常用配置

文章目录 插件安装插件设置 推荐设置1. 控制具有未保存更改的编辑器的 自动保存2. 启用自动猜测编码3. 平滑滚动和光标闪烁的设置4. 自动格式化的设置5. 自动换行功能6. 按下回车键时如何接受代码建议的行为7. 建议列表中如何预先选择建议8. 启用自定义对话框样式9. 控制着是否…

NLP——序列文本信息处理

序列文本信息处理是指对那些具有明确词序或结构顺序&#xff08;如句子、段落、篇章等&#xff09;的文本数据进行专门的分析和转换&#xff0c;以保留并利用其内在的时序或逻辑关系。在NLP中&#xff0c;处理序列文本信息通常涉及以下几个关键步骤&#xff1a; 分词&#xff0…

JavaScript流程控制语句

JavaScript 中的流程控制语句用于控制代码的执行流程。以下是 JavaScript 中常见的流程控制语句及其详细代码示例&#xff1a; 1.if 语句&#xff1a; javascriptlet age 18;if (age > 18) { console.log("你已经成年了"); } else { console.log("你还未成…

SpringMvc中的异常处理器(在SpringBoot中也可使用)

目录 一、单个控制器异常处理 二、全局异常处理器 三、自定义异常处理器 在开发过程中&#xff0c;Dao&#xff0c;service&#xff0c;Controller层代码出现异常都可能抛出异常。如果哪里产生异常就在哪里处理异常&#xff0c;则会降低开发效率。所以一般情况下我们会让异常…

windows下安装es

要安装java 参考文章&#xff1a;JAVA(JDK的下载和安装教程)_java jdk下载-CSDN博客 下载es&#xff1a;Java Downloads | Oracle 中国 cd到es的bin目录&#xff0c;运行 elasticsearch.bat 然后访问。localhos:9200 遇到bug的处理方法&#xff1a;↓ 终端中文乱码的&#x…