Spring Cloud學習筆記-007
- 聲明式服務調用:Spring Cloud Feign
Feign基於Netflix Feign實現,整合了Spring Cloud Ribbon和Spring Cloud Hystrix,除了提供這兩者的強大功能之外,它還提供了一種聲明式的Web服務客戶端定義方式。
在使用Spring Cloud Ribbon時,通常都會利用它對RestTemplate的請求攔截來實現對依賴服務的接口調用,而RestTemplate已經實現了對HTTP請求的封裝處理,形成了一套模板化的調用方法。在實際開發中,由於對服務依賴的調用可能不止一處,往往一個接口被多處調用,所以通常都會針對各個微服務自行封裝一些客戶端類來包裝這些依賴服務的調用。Spring Cloud Feign在RestTemplate的基礎上做了進一步的封裝,由它來幫助我們定義和實現依賴服務接口的定義。在Spring Cloud Feign的實現下,我們只需創建一個接口並用註解的方式來配置它,即可完成對服務提供方的接口綁定,簡化了在使用Spring Cloud Ribbon時自行封裝服務調用客戶端的開發量。
1. 啟動註冊中心和demo-member實例,創建demo-customer-feign工程,骨架選擇quickstart。
2. 加入相關依賴:
3. 編寫啟動類:
4. 定義MemberService接口,通過@FeignClient註解指定服務名來綁定服務(註:這裏的服務名不區分大小寫),然後再使用Spring MVC的註解來綁定具體該服務提供的REST接口。
5. 創建MemberController來實現對Feign客戶端的調用。使用@Autowired直接註入上面定義的MemberService實例,並在getMember方法中調用這個綁定了member-service服務接口的客戶端來向該服務發起/member接口的調用。
6. 在src/main/resources目錄下創建application.yml文件:
7. 啟動服務進行驗證:
- 參數綁定
現實系統中的各種業務接口要復雜很多,HTTP的各個位置會傳入各種不同類型的參數,並且在返回請求響應的時候也可能是一個復雜的對象結構。
1. 首先擴展一下服務提供方demo-member。增加下面這些接口定義,其中包含帶有Request參數的請求、帶有Header信息的請求、帶有RequestBody的請求以及請求響應體重是一個對象的請求(註:User對象自定義,只有兩個字段,String name和Integer age,此外,User中必須提供默認的構造方法,不然Spring Cloud Feign根據JSON字符串轉換User對象時會拋出異常)。
2. 然後在demo-customer-feign應用中實現上述新增的請求的綁定:
- 首先在demo-customer-feign中創建與上述一樣的User類。
- 然後,在MemberService接口中增加對上述三個新增接口的綁定聲明:
3. 最後,在MemberController中新增一個/getMember2接口,來對新增的聲明進行調用:
4. 啟動項目,測試結果:
Spring Cloud學習筆記-007