SpringCloud学习:Openfeign组件实现服务调用和负载均衡

ops/2024/10/20 6:50:47/

OpenFeign:服务调用与负载均衡(服务端接口)

  1. 是什么:通过OpenFeign可以实现服务调用和负载均衡
    1. OpenFeign是一个声明性web服务客户端,
      在这里插入图片描述
  2. 怎么用:服务提供者提取公共接口用@FrignClient标注,服务调用者POM,yml,主启动,然后业务类
    1. 当使用RestTemplate实现服务调用时,要在每个微服务中定义RestTemplate对象,然后手动设置要调用的微服务的名字,再使用该对象对该微服务进行调用;此时每个要调用服务的微服务都要定义一个RestTemplate对象
    2. 为了解决这一问题,引入了OpenFeign:此时只需将服务提供者所提供的方法在公共微服务中相应的接口中声明,并用@FeignClients(‘服务提供者名’)标注该接口(此时公共微服务要引入spring-cloud-starter-openfeign依赖才可使用@FeignClients注解),此时就代表服务提供者将其要提供的服务放到公共的接口中,该接口中的方法必须与所提供的服务方法有一致的路径@XxxMapping(),接口方法名字可以不相同
    3. 服务调用者要调用对应微服务提供的服务时,就可以使用openfrign进行调用首先要在该微服务中引入spring-cloud-starter-openfeignPOM依赖,然后改yml,然后再修改启动类,加入@EnableFeign注解来开启OpenFeign,然后此时在controller中通过自动装配定义要调用服务所提供的接口类对象,然后就可以通过该对象调用对应的方法实现对应的服务
  3. 超时控制:在yml中设置全局或者单个超时时间
    1. 在调用者通过Openfeign调用微服务时,会有两个关于超时的配置,分别是connectTimeout和readTimeout
    2. connectTimeout是调用者连接到提供者的超时控制,而readTimeout是连接上后完成服务调用直到返回所限制的超时时间,默认是60秒,即当服务调用时间超过60s未返回时就会报错
    3. 可以在服务调用者客户端上通过修改yml文件来配置超时时间(谁发起调用就配置谁的yml文件),通过修改 spring.cloud.openfeign.client.config.dafault.readtimeout 来设置全局请求(所有调用请求)的超时控制,也可以单独指定某个服务调用的超时控制,通过修改 spring.cloud.openfeign.client.config.服务名.readtimeout 来实现,两个可以共存,且单个配置会覆盖全局配置
  4. 重试机制:默认是关闭的,只要第一个调用失败则直接返回(在配置类开启重试机制)
    1. 可以开启重试机制,当调用失败后会重新发起请求
    2. 在调用者客户端微服务中创建FeignConfig配置类@Configuration注解标注,然后用@Bean注解标注 Retry myRetry(){} 方法,在该方法中默认 return Retry.NEVER_RETRY;(默认是不进行重试的),此时可以修改return Retry.default(初次间隔时间,最大间隔时间,请求总次数)来开启重试机制,此时当第一次请求失败后,会间隔时间后重新发起调用请求,直到规定次数失败后才会返回报错
  5. 性能优化HttpClient5:一定要替换!!先引入POM依赖再在yml中进行配置
    1. OpenFeign默认使用JDK中自带的HttpClient.HttpURLConnection发送HTTP请求,没有连接池、性能和效率也比较低,此时就可以修改OpenFeign的连接
    2. 此时可以使用Apache 的HttpClient5来替换以提高性能,先修改POM中的依赖,导入HC5的依赖,然后修改调用者的yml配置文件spring.cloud.openfeign.httpclient.hc5.enabled=true,以开启HC5来替换默认的HttpClient
  6. 请求回应压缩:直接在yml中开启压缩
    1. 使用OpenFeign进行服务调用时可以对请求和回应进行GZIP压缩,以减少通信过程中性能损耗,要通过参数 **spring.cloud.openfeign.compression.request/response.enabled=true 来开启请求和回应的数据压缩
  7. 日志打印:对Feign的接口调用情况进行监控和输出先在配置类开启日志级别,再在yml中配置对哪个接口进行监控
    1. 先在配置类开启日志级别,再在yml中配置对哪个接口进行监控
    2. 首先要在需要开启日志功能的客户端微服务中的FeignConfig配置类中配置@Bean:Logger.Level返回所选择开启的日志级别Logger.Level.Xxx,然后在yml配置文件中开启日志功能提供设置logging.level.含有@FeignClient注解的接口的完整包名和接口名=debug表示开启日志监控哪个接口的调用情况![[Pasted image 20241011152041.png]]
    3. OpenFeign提供日志打印功能,了解请求的细节,对Feign的接口调用情况进行监控和输出,有四个日志级别:NULL、BASIC、HEADER、FULL,默认是NULL不会记录任何日志信息,BASIC记录了请求的url、请求方法等信息,HEADER记录了请求和响应的头信息,FULL全部信息都记录了正文和元数据等

http://www.ppmy.cn/ops/126909.html

相关文章

同一个交换机不同vlan的设备为什么不能通信

在同一个交换机上,不同 VLAN 的设备不能直接通信,这是因为 VLAN(虚拟局域网)通过在数据链路层(OSI 第2层)对设备进行逻辑隔离,将不同 VLAN 的设备视为属于不同的网络。具体原因如下:…

Flink 窗口触发器Triggers

Triggers ❝ 定义:触发器决定了窗口何时被触发。在Flink中,窗口的触发是通过设置定时器来实现的。 作用:控制窗口数据的聚合时机,确保数据在适当的时间点被处理和输出。 Trigger关键方法 onElement: 当元素被添加到窗口时调用&a…

Oracle中解决select into值集为空的报错情况

先看为空的情况 procedure test is n number; begin select 1 into n from CUX_2_OM_RELEASE_LIMIT_V cov where cov.Customer_Idnull; end; CUX_2_OM_RELEASE_LIMIT_V中没有id是空的,因此返回的结果一定是空集 运行结果: 有时候我…

mybatisPlus只需要实体类

依赖包管理 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><mode…

记忆化搜索

文章目录 记忆化搜索斐波那契数不同路径最长递增子序列猜数字大小 II矩阵中的最长递增路径 记忆化搜索 斐波那契数 题目&#xff1a;斐波那契数 思路 递归 时间复杂度O(2^n) C代码 class Solution { public:int fib(int n) {if(n 0 || n 1) return n;return fib(n - 1) f…

【整合包及教程】第二代GPT-SoVITS V2:革新声音克隆技术

随着人工智能技术的飞速发展&#xff0c;语音克隆技术也在不断进化。近期推出的第二代GPT-SoVITS V2&#xff0c;以其强大的功能和易用性&#xff0c;成为该领域的一大突破。GPT-SoVITS V2不仅能够基于少量的语音样本&#xff08;例如1分钟的音频&#xff09;来克隆音色&#x…

如何快速学会盲打

今天就来给大家分享一下如何快速学会盲打 盲打的基本方法和步骤 手指放置&#xff1a;将双手放在键盘上&#xff0c;左手食指放在F键上&#xff0c;右手食指放在J键上&#xff0c;其他手指分别放在相邻的键位上。熟悉键盘布局&#xff1a;学习26个字母的位置&#xff0c;以及…

rollup 使用实战

rollup 是一个用于 js 的模块打包工具&#xff0c;其作用包括: 高效的模块打包 ES Modules 支持&#xff1a;Rollup 对 ES Modules&#xff08;ECMAScript 模块&#xff09;有很好的支持。它可以将多个小的 ES Modules 模块合并成一个或几个优化后的文件&#xff0c;减少网络请…