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、重新啟動項目,進行服務調用測試
查看控制台輸出日志: