基於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依賴:
(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。
推薦閱讀:
- Feign Client 超時時間配置不生效的解決
- 基於FeignClient調用超時的處理方案
- SpringBoot 關於Feign的超時時間配置操作
- springcloud之Feign超時問題的解決
- 如何解決springcloud feign 首次調用100%失敗的問題