Spring Cloud微服務項目完整示例,含註冊中心,網關,斷路器等等

Spring Cloud微服務項目完整示例

目的是為了演示基於Spring Cloud微服務框架,搭建一個接近業務實際場景的項目,只實現了後端項目,前端可以使用VUE或者其他框架。

後端框架包括註冊中心 Eureka、配置中心Spring Cloud Config、API網關Zuul、客戶端負載均衡Ribbon、斷路器Hystrix,同時還包括2個後端業務服務,一個用戶服務sc-user-service,另一個是數據服務 sc-data-service。

技術架構圖

用戶從瀏覽器發起請求,經過瀏覽器,請求到達Nginx,打開前端頁面,由前端頁面發起請求後端服務,當請求到達後端Nginx後,Nginx對網關層進行負載,因為網關也需要做HA。

此時網關Gateway 接收到請求後,根據請求路徑進行動態路由,根據服務發現是User Service 中的服務,則從Ribbon 中選擇一臺 User Service的實例進行調用,由User Service 返回數據,如果此時User Service 需要使用Data Service的數據,則選擇一臺Data Service的實例進行調用,然後數據給前端,流程結束。

Spring Cloud微服務項目完整示例,含註冊中心,網關,斷路器等等

具體實現

項目結構如下所示,從module名稱,即可理解每個項目的作用了。

其中common是一個公共基礎包,方便給後臺服務引用。

Spring Cloud微服務項目完整示例,含註冊中心,網關,斷路器等等

運行微服務應用

按順序啟動 eureka、zuul-server、data-service、user-service,另外的hystrix-dashboard和config-server 是可行的module。

如下圖所示,可以看到每個應用的運行端口號。

Spring Cloud微服務項目完整示例,含註冊中心,網關,斷路器等等

訪問 eureka UI,查看服務註冊情況。

http://localhost:8761/

每個服務都正常註冊到 eureka 註冊中心了。

Spring Cloud微服務項目完整示例,含註冊中心,網關,斷路器等等

通過網關,訪問如下URL,獲取context user 信息:

http://localhost:7777/sc-user-service/getContextUserId

返回如下結果:

{"exceptionType":"cn.springcloud.book.common.exception.BaseException","code":10001,"businessId":1,"businessMessage":"the user is null, please check","codeEN":"AuthEmptyError"}

這是鑑權 filter 返回的異常信息,因為沒有在請求頭中獲取到x-customs-user信息。

Spring Cloud微服務項目完整示例,含註冊中心,網關,斷路器等等

通過Postman,在請求頭中添加 x-customs-user=rickie 信息,然後再次訪問URL。

http://localhost:7777/sc-user-service/getContextUserId

如下圖所示,目前返回結果正常。

Spring Cloud微服務項目完整示例,含註冊中心,網關,斷路器等等

還可以嘗試訪問其他service API 接口,如獲取provider data等等。

http://localhost:7777/sc-user-service/getProviderData

完整代碼,可以訪問github 獲取:

https://github.com/rickiechina/Spring-Cloud-Full-Demo

本文示例代碼

本文示例代碼,來自《重新定義Spring Cloud實戰》一書,完整的代碼解釋,可以查看該書第十章內容。

Spring Cloud微服務項目完整示例,含註冊中心,網關,斷路器等等


分享到:


相關文章: