• OpenFeign超时控制和日志打印功能


    OpenFeign超时控制

    OpenFeign默认等待1秒钟,超过后报错  

     现在假设8001端口有一个请求复杂的业务,需要的时间比较长。

    1. @GetMapping(value = "/payment/feign/timeout")
    2. public String paymentFeignTimeOut()
    3. {
    4. System.out.println("*****paymentFeignTimeOut from port: "+serverPort);
    5. //暂停几秒钟线程
    6. try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }
    7. return serverPort;
    8. }

     现在80端口调用8001端口中的这个服务

    @FeignClient(value = "CLOUD-PAYMENT-SERVICE")    value的值是8001程序名称

    1. @Component
    2. @FeignClient(value = "CLOUD-PAYMENT-SERVICE")
    3. public interface PaymentFeignService
    4. {
    5. @GetMapping(value = "/payment/feign/timeout")
    6. String paymentFeignTimeOut();
    7. }

    控制类

    1. @RestController
    2. public class OrderFeignController
    3. {
    4. @Resource
    5. private PaymentFeignService paymentFeignService;
    6. @GetMapping(value = "/consumer/payment/feign/timeout")
    7. public String paymentFeignTimeOut()
    8. {
    9. return paymentFeignService.paymentFeignTimeOut();
    10. }
    11. }

    OpenFeign默认等待1秒钟,超过后报错  如图

    http://localhost/consumer/payment/feign/timeout 

     

    默认Feign客户端只等待一秒钟,但是服务端处理需要超过1秒钟,导致Feign客户端不想等待了,直接返回报错。
    为了避免这样的情况,有时候我们需要设置Feign客户端的超时控制。

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

    1. #设置feign客户端超时时间(OpenFeign默认支持ribbon)
    2. ribbon:
    3. #指的是建立连接后从服务器读取到可用资源所用的时间
    4. ReadTimeout: 5000
    5. #指的是建立连接所用的时间,适用于网络状况正常的情况下,两端连接所用的时间
    6. ConnectTimeout: 5000

    OpenFeign日志打印功能

    Feign 提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解 Feign 中 Http 请求的细节。
    说白了就是对Feign接口的调用情况进行监控和输出 

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

    设置如下 

    1. @Configuration
    2. public class FeignConfig
    3. {
    4. @Bean
    5. Logger.Level feignLoggerLevel()
    6. {
    7. return Logger.Level.FULL;
    8. }
    9. }

     

    1. logging:
    2. level:
    3. # feign日志以什么级别监控哪个接口
    4. com.atguigu.springcloud.service.PaymentFeignService: debug
  • 相关阅读:
    浅析任务队列、消息队列、任务调度系统
    ts重点学习111-类的兼容性
    【SpringBoot】整合第三方技术
    Spring 基于注解的容器配置有哪些?
    2022年湖北省自然科学基金计划项目申请条件、要求和项目类型
    【网络篇】第五篇——网络套接字编程(一)(socket详解)
    系统测试主要步骤
    STL常用容器——deque容器的使用
    普通web整合quartz跑定时任务
    地雷数量求解
  • 原文地址:https://blog.csdn.net/m0_62436868/article/details/126293086