OpenFeign服务调用与负载均衡

目录

  • 介绍
  • 使用
  • 高级特性
    • 超时控制
    • 重试机制
    • 默认HttpClient修改
    • 请求/响应报文压缩
    • 日志打印功能
  • 相关文献

介绍

官网说明:
在这里插入图片描述

Feign 是一个声明式 Web 服务客户端。它使编写 Web 服务客户端变得更加容易。要使用 Feign,请创建一个接口并对其进行注释。它具有可插拔的注释支持,包括 Feign 注释和 JAX-RS 注释。Feign 还支持可插拔编码器和解码器。Spring Cloud 增加了对 Spring MVC 注解的支持,以及使用 Spring Web 中默认使用的注 HttpMessageConverters 解。Spring Cloud 集成了 Eureka、Spring Cloud CircuitBreaker 以及 Spring Cloud LoadBalancer,以便在使用 Feign 时提供负载均衡的 http 客户端。

使用

创建一个springboot项目,主启动类加注解**@EnableFeignClients**,开启OpenFeign功能并激活
在这里插入图片描述

在提供接口的项目模块中引入openfeign依赖,新建接口,并在接口类中配置@FeignClient注解,@FeignClient(“xxxx”)的xxx是consul或者是其他服务注册中间件中的服务名。
在这里插入图片描述

高级特性

超时控制

我们可以在默认客户端和命名客户端上配置超时。OpenFeign 使用两个超时参数:

  • connectTimeout 防止由于服务器处理时间过长而阻止调用方。
  • readTimeout 从建立连接时开始应用,并在返回响应时间过长时触发。

OpenFeign不配置超时时间的话默认等待60秒,超时后会报错
在这里插入图片描述

如何自定义配置超时时间如下:
在这里插入图片描述
feignName 在此示例中, 是@FeignClient value 它也与 @FeignClient name 和 @FeignClient contextId 别名。在负载均衡方案中,它还对 serviceId 应于将用于检索实例的服务器应用。decoders、retryer 和其他类的指定类必须在 Spring 上下文中具有 bean 或具有默认构造函数。

配置可分全局配置和指定配置,如果一个接口中存在调用多个微服务的接口,每个微服务的请求时间不同,根据业务不同需要特色化配置,就需要用到指定超时时间配置。

全局配置:

spring:
    cloud:
        openfeign:
            client:
                config:
                    default:
                        connectTimeout: 5000
                        readTimeout: 5000
                        loggerLevel: basic

指定配置

spring:
    cloud:
        openfeign:
            client:
                config:
                    your-server-name:
                        connectTimeout: 5000
                        readTimeout: 5000
                        loggerLevel: basic

区别在于config:下级配置名称不同
如果更喜欢使用配置属性来配置所有 @FeignClient ,则可以使用 default 假名创建配置属性,这样是所有的服务接口统一用一套超时时间,如果yml配置文件中同时存在defalut和指定服务名,指定服务名的超时时间是独立的,其他服务是默认,指定服务名的优先级更高。

重试机制

在模块中新增配置类
在这里插入图片描述

默认HttpClient修改

OpenFeign中http client如果不做特殊配置,OpenFeign默认使用JDK自带的HttpURLConnection发送HTTP请求,
由于默认HpURLConnection没有连接池、性能和效率比较低,如果采用默认,性能上不是最优解,所以要改成http5,且官方回应也是从 Spring Cloud OpenFeign 4 开始,不再支持 Feign Apache HttpClient 4。我们建议改用 Apache HttpClient 5。
在这里插入图片描述
引入依赖

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

修改yml

spring:
 cloud:
  openfeign:
   httpclient:
    hc5:
     anabled: true

修改成功后,日志发生改变
在这里插入图片描述

在这里插入图片描述

请求/响应报文压缩

在这里插入图片描述
对请求和响应进行GZIP压缩
Spring Cloud OpenFeign支持对谐求和响应进行GZIP压缩,以减少通信过程中的性能损耗。通过下面的两个参数设置,就能开启请求与相应的压缩功能:

spring.cloud.openfeign.compression.request.enabled=true
spring.cloud.openfeign.compression.response.enabled=true

细粒度化设置对请求压缩做一些更细致的设置,比如下面的配置内容指定压缩的请求数据类型并设置了请求压缩的大小下限,只有超过这个大小的请求才会进行压缩:

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

日志打印功能

Feign 提供了日志打印功能,对Feign接口的调用情况进行监控和输出
日志级别:

  • NONE ,无日志记录 (DEFAULT)。
  • BASIC ,仅记录请求方式和 URL 以及响应状态代码和执行时间。
  • HEADERS ,记录基本信息以及请求和响应标头。
  • FULL ,记录请求和响应的标头、正文和元数据。

新建配置类,对Feign日志全面打印

@Configuration
public class FooConfiguration {
    @Bean
    Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
    }
}


Feign 会为创建的每个 Feign 客户端创建一个记录器。
默认情况下,记录器的名称是用于创建 Feign 客户端的接口的完整类名。
例如我要监控我的UserClient接口的日志,UserClient类在com.demo.apis包下,那么yml配置如下:

logging:
	level:
		com:
			demo:
				apis:
					UserClient: DEBUG

相关文献

Spring Cloud OpenFeign官网链接:https://docs.spring.io/spring-cloud-openfeign/docs/4.0.7-SNAPSHOT/reference/html/#spring-cloud-feign
Spring Cloud OpenFeign properties属性明细链接:https://docs.spring.io/spring-cloud-openfeign/docs/4.0.7-SNAPSHOT/reference/html/appendix.html
Github OpenFeign:https://github.com/OpenFeign/feign

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/720077.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

避雷!又6本期刊被On Hold!ELSEVIER旗下影响因子高达10+SSCI上榜

【SciencePub学术】继《INFORMATION SCIENCES》被On Hold 之后&#xff0c;又新增3本SCIE期刊、3本SSCI期刊被列入On Hold名单。其中包含ELSEVIER旗下影响因子高达10的《RESOURCES POLICY》。 官方现在对期刊质量的管控越来越严格了&#xff0c;被标记为On Hold后的期刊中&…

服务器测试之硬盘规格扫盲贴

最近整理了AVL系统里的SSD相关规格信息&#xff0c;来个了解硬盘规格信息的扫盲贴,过程很曲折&#xff0c;但是认为学习一下相关规格参数还是很有用的 1.什么是硬盘 硬盘是计算机最主要的存储设备&#xff0c;平常买电脑的时候看到的配置24G1T里的1T就是硬盘&#xff0c;计算机…

618数码好物清单,这些好物你不容错过

每次的618大促中&#xff0c;有各类数码产品纷纷亮相&#xff0c;让人眼花缭乱&#xff0c;而且打折的力度都很高&#xff0c;那么在这个充满诱惑的购物季里&#xff0c;哪些电子数码好物值得你入手呢&#xff1f;今天&#xff0c;我就一起给题主盘点那些实用至上、绝对不吃灰的…

新手小白从Windows转Linux,或许manjaro更适合你!

网管小贾 / sysadm.cc 野生动物园里有一块并不怎么大的水塘&#xff0c;一群火烈鸟就生活在这里。 它们在水塘里悠闲地漫步&#xff0c;饿了就找些小鱼小虾&#xff0c;困了就伸个懒腰、打个盹。 就这样日复一日&#xff0c;过着百无聊赖的日子&#xff0c;直到有一天…… 这…

SAS:从零开始用proc report出人口统计学表

目的&#xff1a;如何生成如下图所示的人口统计学的表格 要点&#xff1a; 1、连续型变量&#xff08;基线体重、基线身高等&#xff09;需要展示例数、均值、中位值、最小值、最大值&#xff1b;离散型变量&#xff08;性别、民族等&#xff09;需要展示例数和百分比。这些统…

【ajax基础01】ajax简介

一&#xff1a;ajax简介 1 什么是ajax AJAX&#xff08;Asynchronous JavaScript And XML &#xff09;是一种在 Web 应用中通过异步发送 HTTP 请求向服务器获取内容&#xff0c;并使用这些新内容更新页面中相关的部分&#xff0c;而无需重新加载整个页面的 Web 开发技术。这可…

springboot 3.x 之 集成rabbitmq实现动态发送消息给不同的队列

背景 实际项目中遇到针对不同类型的消息&#xff0c;发送消息到不同的队列&#xff0c;而且队列可能还不存在&#xff0c;需要动态创建&#xff0c;于是写了如下代码&#xff0c;实践发现没啥问题&#xff0c;这里分享下。 环境 springboot 3.2 JDK 17 rabbitMQ模型介绍 图片…

6月议息偏鹰!国际现货黄金没戏了?

6月13日凌晨&#xff0c;FOMC连续第七次宣布维持利率不变&#xff0c;此举符合市场预期&#xff0c;但对于通胀的表述较5月更为乐观——将“近几个月&#xff0c;在实现委员会2%的通胀目标方面&#xff0c;缺乏进一步的进展”改为了“取得了适度的进一步进展”&#xff0c;加上…

KernelFuzzer部署、使用与原理分析

文章目录 前言1、概述1.1、整体架构1.2、工作流程1.2.1、环境配置流程1.2.2、计划任务执行流程1.2.3、Fuzz测试流程1.2.3.1、整体资源调度1.2.3.2、选取Fuzz测试目标1.2.3.3、生成Fuzz测试参数1.2.3.4、进行Fuzz测试 2、安装与使用2.1、源码安装2.1.1、部署系统依赖组件2.1.1.1…

一文读懂 Transformer 神经网络模型

今天我们来聊一下人工智能&#xff08;AI&#xff09;生态领域相关的技术 - Transformer 神经网络模型 。 自从最新的大型语言模型&#xff08;LLaM&#xff09;的发布&#xff0c;例如 OpenAI 的 GPT 系列、开源模型 Bloom 以及谷歌发布的 LaMDA 等&#xff0c;Transformer 模…

可燃气体报警器:户外工地安全预警先锋,定期检定保障安全无忧

在现代化的建设进程中&#xff0c;户外工地作为城市发展的重要推动力&#xff0c;其安全问题一直备受关注。 工地现场往往涉及多种易燃易爆气体&#xff0c;一旦发生泄漏&#xff0c;后果不堪设想。因此&#xff0c;如何有效预警并防范可燃气体泄露&#xff0c;成为户外工地安…

封装分发安装教程

【安装环境】 Linux伪静态 PHP7.1mysql5.6 SSL 证书 &#xff08;使用宝塔&#xff09; 1、在宝塔上面新建站点&#xff0c;把压缩包上传到根目录&#xff0c;解压出来&#xff0c;然后导入 sql 数据库文件&#xff0c;再 然后修改数据库配置 source\system\db_config.php 2、…

【GlobalMapper精品教程】085:coverage格式转shp案例教程

文章目录 一、Coverage格式介绍二、globalmapper转换shp1. 加载coverage2. coverage转shp一、Coverage格式介绍 Coverage 是一种用于存储矢量数据的地理相关数据模型,它包含地理要素的空间(位置)数据和属性(描述性)数据。Coverage 使用一组要素类来表示地理要素。每个要素…

对input输入框的正则限制

一、0-100的整数 正则&#xff1a; const inputRules ref([{required: false,trigger: "blur",validator: (rule, value, callback) > {const reg /^[0-9]$/; // 只允许整数if ((0 < value && value < 100 && reg.test(value)) ||valu…

视频汇聚安防综合管理系统EasyCVR平台GB28181设备注册未上线的原因排查与解决

视频汇聚安防综合管理平台EasyCVR视频监控系统基于云边端架构&#xff0c;可支持海量视频汇聚集中管理&#xff0c;能提供视频监控直播、云端录像、云存储、录像检索与回看、告警&#xff08;协议告警/智能告警/1400视图库告警&#xff09;、平台级联、AI智能分析接入等视频能力…

Python 库PySpark,一个超级强大的数据处理引擎

目录 01初识 PySpark 为什么选择 PySpark? 安装 PySpark 配置 PySpark 02基本操作 创建 RDD 基本 RDD 操作 03DataFrame 和 Spark SQL 创建 DataFrame 基本 DataFrame 操作 使用 Spark SQL 04机器学习与流处理 …

这俩项目,牛哇。

你每天是不是会在各个平台上浏览文章&#xff0c;比如公众号、知乎等等&#xff0c;想把看过的高质量文章管理在一个地方&#xff1f;第一个开源项目能帮到你。 第二个开源项目&#xff0c;是 AI 大佬吴恩达开源的基于 Agent 的项目&#xff0c;结合逛逛 GitHub 之前发布的 AI …

RK3568技术笔记九 编译Linux详细介绍

在编译前需要按照前面的方法始化编译环境&#xff0c;否则会导致编译失败&#xff08;若配置过则无需重复配置&#xff09;。 全自动编译包含所有镜像编译&#xff0c;包括&#xff1a;uboot编译、Kernel编译、Recovey编译、文件系统编译、编译完成镜像的更新与打包。 按照前面…

基于Spring Boot+VUE旅游管理系统

1管理员功能模块 管理员通过点击后台管理&#xff0c;进入页面可以输入用户名、密码、角色进行登录相对应操作&#xff0c;如图1所示。 图1管理员登录界面 管理员通过点击后台管理&#xff0c;进入页面可以填写首页、个人中心、用户管理、旅游方案管理、旅游购买管理、系统管…

多协议接入/GB28181/GAT1400协议/安防综合管理系统EasyCVR报错version`GLIBCXX_3.4.19‘not found如何处理?

多协议接入/GB28181/GAT1400协议/安防综合管理系统EasyCVR视频汇聚平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。智慧安防/视频存储/视频监控/视频汇聚EasyCVR平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、…