• OpenFeign服务调用与负载均衡


    在这里插入图片描述

    介绍

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

    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.client5groupId><artifactId>httpclient5artifactId>
    <version>5.3version>
    dependency>
    <1--feign-hc5-->
    <dependency>
    <groupId>io.github.openfeigngroupId>
    <artifactId>feign-hc5artifactId>
    <version>13.1version>
    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

    就先说到这 \color{#008B8B}{ 就先说到这} 就先说到这
    在下 A p o l l o \color{#008B8B}{在下Apollo} 在下Apollo
    一个爱分享 J a v a 、生活的小人物, \color{#008B8B}{一个爱分享Java、生活的小人物,} 一个爱分享Java、生活的小人物,
    咱们来日方长,有缘江湖再见,告辞! \color{#008B8B}{咱们来日方长,有缘江湖再见,告辞!} 咱们来日方长,有缘江湖再见,告辞!

    在这里插入图片描述

  • 相关阅读:
    每日一练Day12
    T1028:字符菱形(信息学一本通C++)
    汽车防滑约束装置(ASR)
    【译】什么时候使用 Spring 6 JdbcClient
    信息系统项目管理师第四版学习笔记——项目采购管理
    优思学院|精益六西格玛中的8大浪费是什么?
    python使用LRU缓存算法,利用带缓存的动态规划法求解斐波那契数列
    Flutter splash 屏幕
    ESP8266-Arduino编程实例-LM75温度传感器驱动
    70-Java的日期时间:Date、SimpleDateFormat、Calendar、JDK8后新增日期API
  • 原文地址:https://blog.csdn.net/pang_ping/article/details/139771335