SpringCloud中的OpenFeign的超时控制和日志增强

SpringCloud中的OpenFeign的超时控制和日志增强


为什么要学这个?你不想面试的时候多装两个逼多拿两千块钱?

先回顾一下我们之前OpenFeign的基本使用SpringCloud中的OpenFeign以及与Feign的区别

我们现在衍生一下,在实际生产环境中,服务提供者可能会出现很多问题,网络环境,数据库交互等,服务提供者返回数据的时间可能会很长。。或者说有一个服务接口,它是一个长流程接口,可能要等待3s,5s甚至更长时间才能返回数据。那么这个时候,我们的服务提供者怎么办呢? 如果服务方发生不可预知的情况一直没有返回数据,消费端要一直挂起等待吗

1.这里我们学习一下OpenFeign的超时控制

案例我们就继续上个文章里面的代码来掩饰SpringCloud中的OpenFeign以及与Feign的区别

这是服务提供端,有这样一个接口,这个接口我们手动的让它等待3S再返回!模拟服务长时间不返回的场景。
    @GetMapping("/testOpenFeign01")
    public String testOpenFeign01()throws InterruptedException{
        Thread.sleep(3000);
        return deptService.testOpenFeign01();
    }

这里是消费端,FeignClient接口代码,我们消费端将会调用testOpenFeign01()方法,这样它就会去访问到服务端的"/testOpenFeign01"接口,也就是上面贴出来的代码。
@Component
@FeignClient(value = "SPRINGCLOUD-PROVIDER-DEPT")
public interface MyTestOpenFeign01 {

    @GetMapping("/testOpenFeign01")
     String testOpenFeign01();


    @GetMapping("/testOpenFeign02")
     String testOpenFeign02();
}


现在测试一下,用浏览器给消费端发请求,会发生什么?
SpringCloud中的OpenFeign的超时控制和日志增强
报错求了! 看上面我红线框起来的信息。Read timed out。超时了。
为什么会这样呢?按理来说,浏览器应该会转圈等待3s然后返回正确的信息,但这里维斯很么会报错呢?

OpenFeign默认超时时间是1S
哦豁,那怎么办呢? 假如现在有一个服务,我们知道它的处理过程很复杂,要5S中才能返回结果,那该怎么办呢?
为了避免这样的情况,我们可以手动的设置OpenFeign的超时时间。
去到消费端的配置文件加下面这段配置

	#设置OpenFeign的超时时间(应该OpenFeign默认支持Ribbon,所以超时控制由Ribbon实现)
ribbon:
  #指建立连接所用的时间,适用网络正常情况下,两端连接所用时间
  ReadTimeout: 5000
  #指建立连接后从服务器读到数据所用的时间
  ConnectTimeout: 5000


2.OpenFeign日志增强功能(日志打印)

OpenFeign提供了这样的功能,而且可以通过调节日志级别,从而了解OpenFeign中Http请求的细节。 换句话说就是对OpenFeign调用情况的监控和输出!
OPenFeign的日志级别

NONE:默认值,不打日志
BASIC:记录请求方法,URL,响应状态码和请求时间
HEADERS : 在BASIC的基础上,还有请求头和响应头的信息
FULL:包含以上所有,还有请求和响应的正文

都会在底层把这两个接口解析成方法元数据,再通过动态代理生成接口的代理,真正发请求的是代理类!

项目启动的时候,会用LoadBalancerFeignClient注册一个feign.Client到ioc容器中。

	在配置类中新增这样一个Bean。级别是FULL
   @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }

然后去到消费端的配置文件处加上以下配置

logging:
  level:
    # feign以什么级别的日志去监听哪个接口,这里的接口就是@FeignClient修饰的接口
    com.common.springcloud.OpenFeign.MyTestOpenFeign01:debug

测试一下,日志打印成功。。。。
SpringCloud中的OpenFeign的超时控制和日志增强

好了 基本已经讲完,欢迎大家评论区指出不足,一起学习进步!

大家看完了点个赞,码字不容易啊。。。

上一篇:SpringCloud-OpenFeign学习-1


下一篇:Spring Cloud Openfeign 源码笔记