H__D  

OpenFeign服务超时

  搭建项目:参考上一章项目:【SpringCloud】OpenFeign服务调用(八)

  情景:在SpringCloud微服务调用的时候,肯能某些提供的服务没有及时响应,或者服务处理时间较长,可能造成调用方超时。如果使用OpenFeign调用服务的话,会自动断开,并报错。如果确实时间耗时长,可以设置超时时间

  1、在服务提供者controller中,编写如下服务(耗时3秒),内容如下:

1 @GetMapping(value = "/payment/feign/timeout")
2 public String paymentFeignTimeout(){
3     try {
4         TimeUnit.SECONDS.sleep(3);
5     } catch (InterruptedException e) {
6         e.printStackTrace();
7     }
8     return serverPort;
9 }

  2、在消费者的FeignClient中添加接口

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

  3、编写消费者controller中,编写调用方法

1 @GetMapping(value = "/consumer/payment/feign/timeout")
2 public String paymentFeignTimeout() {
3     return paymentFeignService.paymentFeignTimeout();
4 }

  4、测试调用方法

    启动项目,使用地址:http://localhost:7997/consumer/payment/feign/timeout

    

    可以看到应为服务提供者的服务超时,导致调用者报超时错误

  5、修改配置文件,增加一下配置,修改Ribbon的超时时间

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

  6、重新启动项目,使用地址:http://localhost:7997/consumer/payment/feign/timeout

    

OpenFeign日志输出

  Feign对日志的处理非常灵活,可为每个Feign客户端指定日志记录策略,每个Feign客户端都会创建一个logger。默认情况下,logger的名称是Feigh接口的完整类名。需要注意的是,Feign的日志打印只会对DEBUG级别做出响应。

  Feign有一下日志级别:

  NONE:默认的,不显示任何日志

  BASIC:仅记录请求方法、URL、响应状态码及执行时间

  HEADERS:出了BASIC中定义的信息之外,还有请求和响应的头信息

  FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元素

  示例

  1、新增Feign配置类,配置Feign日志

 1 package com.test.springcloud.config;
 2 
 3 import feign.Logger;
 4 import org.springframework.context.annotation.Bean;
 5 import org.springframework.context.annotation.Configuration;
 6 
 7 
 8 @Configuration
 9 public class FeignConfig {
10 
11     @Bean
12     public Logger.Level feignLoggerLevel(){
13         return Logger.Level.FULL;
14     }
15 
16 }

  2、配置文件中修改,日志级别,增加内容如下:

1 logging:
2   level:
3     com.test.springcloud.service.PaymentFeignService: debug

  3、重新启动项目,进行服务调用测试

    查看控制台输出日志:

    

 

posted on 2020-04-13 14:26  H__D  阅读(1791)  评论(0编辑  收藏  举报