SpringBoot 關於Feign的超時時間配置操作

Feign的超時時間配置

feign 時間設置

  • contextId: 可以指定為某個接口進行單獨的超時設置
@FeignClient(value = "user",contextId ="device")
public interface DeviceFeignService {

    @RequestMapping(value = { "/deviceId" })
    JsonResult<Device> 
         getByDeviceId(@RequestParam("deviceId") final Long deviceId);
}
feign:
  client:
    config:
      #default代表所有服務
      default: 
        #feign客戶端建立連接超時時間
        connect-timeout: 10000
        #feign客戶端建立連接後讀取資源超時時間
        read-timeout: 20000
      #而service-test表示當調用service-test這個服務時,用下面的配置
      device:
        connect-timeout: 10000
        read-timeout: 20000

Feign調用問題 \ 超時

1、項目結構

每個微服務是provider情況下有一個client模塊(裡面含有定義好的feignclient 接口) 專門打包出去給其他微服務消費

這樣的話 其他需要調用的微服務隻要把這個client jar包引入即可,

2、在其他微服務中 引入clientXX.jar

這時候有一個坑, 就是 @EnableFeignClients這個註解默認是隻掃描項目啟動application下的包 如果不同項目可能包路徑不一致, 所以@EnableFeignClients得指定你的client.jar裡面的路徑 或者兩個項目中 共同的頂級路徑 例如com.XX.cloud 同一個公司內部 頂層包結構應該是一致的

3、feign調用超時

默認feign調用超時是1000毫秒的 有斷點就肯定超時

需要加上以下配置

feign.hystrix.enabled=true
#feign調用默認是1000毫秒=1秒   應該設置成更長時間1000 * 60 * 5  = 5分鐘  add by six-vision
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=300000
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=300000
hystrix.command.default.circuitBreaker.forceClosed=true
#hystrix.command.default.execution.timeout.enabled=false
#請求處理的超時時間  add by six-vision
ribbon.ReadTimeout=300000
ribbon.SocketTimeout=300000
#請求連接的超時時間 add by six-vision
ribbon.ConnectTimeout: 30000

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: