声明式服务调用Feign

Feign优化

Feign帮我们做了哪些事儿:

  • 在 声明Feign客户端 之后,Feign会根据@FeignClient注解使用java的动态代理技术生成代理类,在这里我们指定@FeignClient 的value属性为serviceB,则说明这个类的远程目标为spring cloud的服务名称为serviceB的微服务。
  • serviceB的具体访问地址,Feign会交由ribbon获取,若该服务有多个实例地址,ribbon会采用指定的负载均衡策略选取实例。
  • Feign兼容spring的web注解(如:@GetMapping),它会分析声明Feign客户端方法中的Spring注解,得出Http请求method、参数信息以及返回信息结构。
  • 当业务调用Feign客户端方法时,会调用代理类,根据以上分析结果,由代理类完成实际的参数封装、远程http请求,返回结果封装等操作。
    @Configuration
    public class ConfigBean {
        /**
         * 添加@LoadBalanced注解之后,Ribbon会给restTemplate请求添加一个拦截器,
         * 在拦截器中获取注册服务的列表,
         * 并使用Ribbon内置的负载均衡算法从服务列表中选取一个服务,
         * 通过获取到的服务信息(ip和port)替换成serviceId实现负载均衡.
         */
        @Bean
        @LoadBalanced //开启负载均衡ribbon ,默认使用轮询策略
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }

    注意: 在feign中是通过ribbon的负载均衡策略获取服务的具体访问地址的.

1.开启http连接池

FeignHTTP客户端支持3种框架:HttpURLConnectionHttpClientOkHttp

观察源码可以发现,Feign 默认是采用java.net.HttpURLConnection 的,每次请求都会建立、关闭连接。

为了性能考虑,我们可以引入httpclientokhttp作为底层的通信框架。

1)在pom.xml中添加httpclient依赖

<dependency>
     <groupId>io.github.openfeign</groupId>
     <artifactId>feign-httpclient</artifactId>
</dependency>

2)在application.yml文件中开启连接池

feign:
  httpclient:
    enabled: true #开启http连接池

3)此时查看

 2.开启Feign日志

OpenFeign 的日志级别如下:

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

1.在application.yml中要先开启feign的日志

feign:
  client:
    config:
      default:
        loggerLevel: full #开启feign日志

2.设置全局日志级别为Debug

logging:
  level:
    com.bjpowernode.feign: debug #日志等级
com.bjpowernode.feign :为Feign接口所在包路径.

3.开启日志后,控制台会打印以下详细信息.

 3.开启gzip压缩

介绍

gzip 是一种数据格式,采用用 deflate 算法压缩 data;gzip 是一种流行的文件
压缩算法,应用十分广泛,尤其是在 Linux 平台。

能力

当 Gzip 压缩到一个纯文本文件时,效果是非常明显的,大约可以减少 70%
以上的文件大小。

作用

网络数据经过压缩后实际上降低了网络传输的字节数,最明显的好处就是可
以加快网页加载的速度。网页加载速度加快的好处不言而喻,除了节省流量,改善用户的浏
览体验外,另一个潜在的好处是 Gzip 与搜索引擎的抓取工具有着更好的关系。例如 Google
就可以通过直接读取 gzip 文件来比普通手工抓取 更快地检索网页。
1.在项目的application.yml文件中开启gzip压缩

server:
   compression:
   enabled: true #开启浏览器<---->consumer的gzip压缩
   #配置支持压缩的 MINE TYPE (默认的)
   mime-types: text/html,text/xml,text/plain,application/xml,application/json
feign:
   compression:
       request:
          enabled: true #开启consumer<---->provider的gzip压缩
       response:
          enabled: true

4.Feign超时

注意: 在测试feign请求超时时,需要把feign的日志增强去掉,否则设置超时时间会不起作用.

方式一: 在application.yml中ribbon上配置

ribbon:
  ConnectionTimeout: 5000 #连接超时时间
  ReadTimeout: 5000 #响应超时时间

方式而: 在application.yml中feign上配置

feign:
   client:
      config:
         feign-provider: #指定feign请求的服务名称(也可以是default,表示默认)
            ConnectionTimeout: 5000
            ReadTimeout: 5000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值