基於springboot服務間Feign調用超時的解決方案

解決springboot服務間Feign調用超時問題概述

1、起因

在完成項目功能需求的開發,經過自己測試以及通過測試組測試通過後,昨晚正式部署到線上環境進行正式運行前的最後一次的測試。但是在測試中,由A服務調用B服務接口時,***通過Feign調用(其實就是http請求,當A服務調用B服務時,如果不配置超時時間,那麼A發出請求後,B應該立即響應,否則A服務會認為B已經斷開連接)出現***連接超時的錯誤,錯誤信息:Read timed out…

2、原因

用idea開發debug模式調試代碼時,在處理服務間調用時,由於debug模式調試代碼花費一些時間,結果出現Fegin連接超時問題

3、解決方案

在springboot項目application.yml配置文件中添加

#解決跨服務問題

增加配置

4、使用Feign的好處

首先我們的項目使用瞭SpringCloud技術,而Feign可以和SpringCloud技術無縫整合。並且,你一旦使用瞭Feign作為http客戶端,調用遠程的http接口就會變得像調用本地方法一樣簡單。

5、項目如何使用Feign

(1) 首先你得引入Feign依賴的jar包:

gradle依賴:

compile “org.springframework.cloud:spring-cloud-netflix-core:1.3.2.RELEASE”

Maven依賴:

Maven依賴:

(2) 在properties配置文件中配置要調用的接口的URL路徑(域名部分)

url.xapi=http://xapi.xuebusi.com

(3) 聲明要調用的遠程接口

在這裡插入圖片描述

6、說明:

(1) @FeignClient 是Feign提供的註解,用於通知Feign組件對該接口進行代理(不需要編寫接口實現),使用者可直接通過@Autowired註入。

(2) @RequestMapping 是Spring提供的註解,這裡可以直接使用以前使用SpringMVC時用過的各種註解,唯一不同的是,這裡隻是把註解用在瞭接口上。

(3) 如果將Feign與Eureka組合使用,@FeignClient(name = “xapi”)意為通知Feign在調用該接口方法時要向Eureka中查詢名為 xapi 的服務,從而得到服務URL,

(4) 但是遠程的http接口並不是我們自己的,我們無法把它註冊到Eureka中,所以這裡我們就使用 url = “${url.xapi}” 把要調用的接口的url域名部分直接寫死到配置文件中。

feign超時問題解決必殺技

1、配置中添加:

feign:
  hystrix:
    enabled: false

2、添加:

hystrix:
  command:
    default:
      execution:
        timeout:
          enabled: false

3、添加:

ribbon:
  ReadTimeout: 10000
  ConnectTimeout: 10000

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

推薦閱讀: