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的實例進行調用,然後數據給前端,流程結束。
具體實現
項目結構如下所示,從module名稱,即可理解每個項目的作用了。
其中common是一個公共基礎包,方便給後臺服務引用。
運行微服務應用
按順序啟動 eureka、zuul-server、data-service、user-service,另外的hystrix-dashboard和config-server 是可行的module。
如下圖所示,可以看到每個應用的運行端口號。
訪問 eureka UI,查看服務註冊情況。
http://localhost:8761/
每個服務都正常註冊到 eureka 註冊中心了。
通過網關,訪問如下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信息。
通過Postman,在請求頭中添加 x-customs-user=rickie 信息,然後再次訪問URL。
http://localhost:7777/sc-user-service/getContextUserId
如下圖所示,目前返回結果正常。
還可以嘗試訪問其他service API 接口,如獲取provider data等等。
http://localhost:7777/sc-user-service/getProviderData
完整代碼,可以訪問github 獲取:
https://github.com/rickiechina/Spring-Cloud-Full-Demo
本文示例代碼
本文示例代碼,來自《重新定義Spring Cloud實戰》一書,完整的代碼解釋,可以查看該書第十章內容。
閱讀更多 軟件架構 的文章