OpenFeign服务调用与负载均衡

2024-06-26 1416阅读

OpenFeign服务调用与负载均衡

目录

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

      介绍

      官网说明:

      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服务调用与负载均衡

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

      OpenFeign服务调用与负载均衡

      高级特性

      超时控制

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

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

        OpenFeign不配置超时时间的话默认等待60秒,超时后会报错

        OpenFeign服务调用与负载均衡

        如何自定义配置超时时间如下:

        OpenFeign服务调用与负载均衡

        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和指定服务名,指定服务名的超时时间是独立的,其他服务是默认,指定服务名的优先级更高。

        重试机制

        在模块中新增配置类

        OpenFeign服务调用与负载均衡

        默认HttpClient修改

        OpenFeign中http client如果不做特殊配置,OpenFeign默认使用JDK自带的HttpURLConnection发送HTTP请求,

        由于默认HpURLConnection没有连接池、性能和效率比较低,如果采用默认,性能上不是最优解,所以要改成http5,且官方回应也是从 Spring Cloud OpenFeign 4 开始,不再支持 Feign Apache HttpClient 4。我们建议改用 Apache HttpClient 5。

        OpenFeign服务调用与负载均衡

        引入依赖

        
        org.apache.httpcomponents.client5httpclient5
        5.3
        
        
        
        io.github.openfeign
        feign-hc5
        13.1
        
        

        修改yml

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

        修改成功后,日志发生改变

        OpenFeign服务调用与负载均衡

        OpenFeign服务调用与负载均衡

        请求/响应报文压缩

        OpenFeign服务调用与负载均衡

        对请求和响应进行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}{咱们来日方长,有缘江湖再见,告辞!} 咱们来日方长,有缘江湖再见,告辞!

          OpenFeign服务调用与负载均衡

VPS购买请点击我

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

目录[+]