Spring Cloud Java OpenFeign

Spring Cloud -- OpenFeign初探

黃翰暉 Jacob Huang 2021/11/10 09:00:00
3108

前言

      今天我們要繼續來分享Spring Cloud的另一個功能:OpenFeign。

      Feign是一個聲明式的WebService Clinet端,使用方式非常的簡單,就是在已經定義好的介面上加上註解即可使用,Feign也可以與Eureka和Ribbon組合使用以支持負載均衡。

 

Feign的功用

      Feign最重要的功用,就是讓開發Java Http客戶端變得更容易。

      之前的文章中,我們在使用Ribbon時,有使用過RestTemplate來對http請求的封裝處理,這個成為了一套固定格式的呼叫方法,不過因為實際開發上不會只有一個服務會需要這樣的呼叫方式,常常是一個服務被多處呼叫,所以這時在使用上的方法通常會在每一個微服務上自行封裝一套客戶端類別的方式來做呼叫,但這樣的缺點就是會讓開發量增加,造成維護上的負擔,Feign的功用即是將這些功能自動的替你封裝起來,只需要在微服務上加一個Feign的註解即可使用,簡化了使用Spring cloud Ribbon時造成許多重複的程式開發量。 

 

OpenFeign

      Spring Cloud因為持續都在更新,目前比較推薦的是使用OpenFeign,它是在原有的Feign基礎上支持了SpringMVC的註解,如@RequentMapping等等。

 

      接下來我們一樣再實作一個微服務來體驗一下OpenFeign的功能:

 

1. 建立一個微服務 cloud-consumer-feign-order80

 

2. pom.xml文件加入OpenFeign的jar包

 

3. resource -> application.yml中加入port及Eureka相關訊息

 

4. 在微服務的主啟動類別上加入Feign的annotation

 

5. 然後我們在做一個service層,根據Feign的使用方式,我們加一個@FeignClient在Service介面,裡面的value部分為我們對外暴露的微服務名稱,方法的部分如下圖,可以看到我們能夠很簡潔的就呼叫到我們Service端的微服務

 

6. 再來我們實做一個Controller層,使前端能夠呼叫到我們用OpenFeign做成的客戶端,為了與Service端微服務有區別,我們在呼叫的網址上多加一個/consumer

 

7. 再來我們選擇Eureka的7001及7002、Payment的8001及8002、以及我們本次做的OpenFeign來做批次啟動

 

8. 開啟我們的網頁,網址輸入http://localhost/consumer/payment/get/1,我們可以看到我們成功的呼叫到我們需要查詢的資料

 

9. 我們重新整理幾次網頁,可以看到serverPort會在8001及8002來回出現,也代表我們OpenFeign自帶有負載均衡的功能

 

 

      以上,我們使用OpenFeign來實現簡易直覺的服務調用及負載均衡,下一篇我們將會分享OpenFeign的超時控制是什麼及實作,若其中有疏漏,也歡迎各位前輩不吝指教,謝謝大家~

 

參考文獻

 

尚硅谷Spring Cloud教程

Spring Cloud官方網站

 

黃翰暉 Jacob Huang