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、重新启动项目,进行服务调用测试
查看控制台输出日志: