Spring Cloud -- OpenFeign超時控制、日誌功能
前言
微服務和微服務間互相呼叫,有時候會出現一種狀況,就是兩邊的呼叫等待時間的不一致造成的錯誤,例如:Service端微服務需處理的時間為10秒,但是Client端的微服務卻只等5秒便拋出time out的錯誤,這部分通常在開發時就應該要溝通處理好。而OpenFeign針對這樣的狀況有提供了相應的處理功能,今天我們將要來分享OpenFeign的超時控制的設定。
再來分享OpenFeign的一個小功能:日誌功能,它可以將從http呼叫後API執行的一連串流程,非常詳細的紀錄下來,雖然說可能蠻多人都喜歡使用@SLF4J,不過因為這個功能能記錄的蠻詳細的,並且不用太多程式就可以完成,因此提供給大家做個參考~
OpenFeign超時控制
接下來,我們需要做出一個模擬的環境,來模擬出Service端和Client端處理速度不一致的情境:
1. 首先,在payment8001中增加一段程式,這段程式沒有任何意義,只是想要讓它執行3秒鐘
2. 再來,我們從OpenFeign的客戶端中的Service介面加一段呼叫該程式的方法
3. 加入Controller呼叫Service程式,程式預設為等待1秒鐘
4. 啟動payment 8001、Feign、Eureka 7001、7002
5. 啟動成功後,打開網頁 http://localhost/consumer/payment/feign/timeout,可以看到執行後出現了time out
6. 為了解決這樣的問題,我們需要在Feign Client端中的application.yml中加入如下圖的設定
7. 加完之後重啟,開啟網頁後我們可以看到已經排除了因為兩個微服務執行時間不一,造成的time out問題
OpenFeign日誌紀錄
這次一樣是用到之前已經做好的Feign Client端的package,如果還沒完成可以參考 "Spring Cloud -- OpenFeign初探" 先把這包package完成,這個功能最主要的作用,就是對Feign的介面呼叫情況進行監控及輸出。
OpenFeign的日誌有分4種日誌級別:
1. NONE:此為預設,代表不顯示任何日誌。
2. BASIC:僅記錄呼叫方法、URL、response狀態碼及執行時間。
3. HEADERS:除了BASIC的信息之外,另有request及response的開頭訊息
4. FULL:除了HEADERS的信息之外,另有request及response的正文及原數據
再來我們針對OpenFeign的日誌設置做一個Demo:
1. 在Feign Client這一包中加一個config的package,並建立一個FeignConfig的類別
2. 在FeignConfig中配置日誌的bean,這邊我們直接使用Full來看整個log顯示的狀態
3. 再來我們在application.yml中加上日誌的設定,File可以設定路徑將log存入自己想要設定的路徑
4. 再來我們啟動Eureka7001、7002,Feign、Payment8001、8002,開啟網頁後查詢 http://localhost/consumer/payment/get/1
查詢成功後可以看到console的部份會顯示非常完整的log
5. 當然在我們設定的路徑中也有儲存相對應的log
以上,為OpenFeign在超時時間所產生的問題上給出的解決方案以及日誌紀錄的功能,分享給大家,下一篇我們將開始進到下一個功能 -> Hystrix服務降級及熔斷,文章中若有疏漏,也歡迎各位前輩不吝指教,謝謝大家~
參考文獻
尚硅谷Spring Cloud教程