本項目是一個基于 Spring Boot、Spring Cloud、Spring Oauth2 和 Spring Cloud Netflix 等架構建構的微服務項目。
技術棧
- Spring boot - 微服務的入門級微架構,用來簡化 Spring 應用的初始搭建以及開發過程。
- Eureka - 雲端服務發現,一個基于 REST 的服務,用于定位服務,以實作雲端中間層服務發現和故障轉移。
- Spring Cloud Config - 配置管理工具包,讓你可以把配置放到遠端伺服器,集中化管理叢集配置,目前支援本地存儲、Git 以及 Subversion。
- Hystrix - 熔斷器,容錯管理工具,旨在通過熔斷機制控制服務和第三方庫的節點,進而對延遲和故障提供更強大的容錯能力。
- Zuul - Zuul 是在雲平台上提供動态路由,監控,彈性,安全等邊緣服務的架構。Zuul 相當于是裝置和 Netflix 流應用的 Web 網站後端所有請求的前門。
- Spring Cloud Bus - 事件、消息總線,用于在叢集(例如,配置變化事件)中傳播狀态變化,可與 Spring Cloud Config 聯合實作熱部署。
- Spring Cloud Sleuth - 日志收集工具包,封裝了 Dapper 和 log-based 追蹤以及 Zipkin 和 HTrace 操作,為 SpringCloud 應用實作了一種分布式追蹤解決方案。
- Ribbon - 提供雲端負載均衡,有多種負載均衡政策可供選擇,可配合服務發現和斷路器使用。
- Turbine - Turbine 是聚合伺服器發送事件流資料的一個工具,用來監控叢集下 hystrix 的 metrics 情況。
- Spring Cloud Stream - Spring 資料流操作開發包,封裝了與 Redis、Rabbit、Kafka 等發送接收消息。
- Feign - Feign 是一種聲明式、模闆化的 HTTP 用戶端。
- Spring Cloud OAuth2 - 基于 Spring Security 和 OAuth2 的安全工具包,為你的應用程式添加安全控制。
應用架構
該項目包含 8 個服務
- registry - 服務注冊與發現
- config - 外部配置
- monitor - 監控
- zipkin - 分布式跟蹤
- gateway - 代理所有微服務的接口網關
- auth-service - OAuth2 認證服務
- svca-service - 業務服務A
- svcb-service - 業務服務B
體系架構

應用元件
啟動項目
- 使用 Docker 快速啟動
- 配置 Docker 環境
-
打包項目及 Docker 鏡像mvn clean package
- 在項目根目錄下執行
啟動所有項目docker-compose up -d
- 本地手動啟動
- 配置 rabbitmq
- 修改 hosts 将主機名指向到本地
或者修改各服務配置檔案中的相應主機名為本地 ip127.0.0.1 registry config monitor rabbitmq auth-service
- 啟動 registry、config、monitor、zipkin
- 啟動 gateway、auth-service、svca-service、svcb-service
項目預覽
注冊中心
通路 http://localhost:8761/ 預設賬号 user,密碼 password
監控
通路 http://localhost:8040/ 預設賬号 admin,密碼 admin
控制台
應用注冊曆史
Turbine Hystrix面闆
應用資訊、健康狀況、垃圾回收等詳情
計數器
檢視和修改環境變量
管理 Logback 日志級别
檢視并使用 JMX
檢視線程
認證曆史
檢視 Http 請求軌迹
Hystrix 面闆
鍊路跟蹤
通路 http://localhost:9411/ 預設賬号 admin,密碼 admin
控制台
鍊路跟蹤明細
服務依賴關系
RabbitMQ 監控
Docker 啟動通路 http://localhost:15673/ 預設賬号 guest,密碼 guest(本地 rabbit 管理系統預設端口15672)
接口測試
- 擷取 Token
curl -X POST -vu client:secret http://localhost:8060/uaa/oauth/token -H "Accept: application/json" -d "password=password&username=anil&grant_type=password&scope=read%20write"
傳回如下格式資料:
{
"access_token": "eac56504-c4f0-4706-b72e-3dc3acdf45e9",
"token_type": "bearer",
"refresh_token": "da1007dc-683c-4309-965d-370b15aa4aeb",
"expires_in": 3599,
"scope": "read write"
}
- 使用 access token 通路 service a 接口
curl -i -H "Authorization: Bearer eac56504-c4f0-4706-b72e-3dc3acdf45e9" http://localhost:8060/svca
傳回如下資料:
svca-service (172.18.0.8:8080)===>name:zhangxd
svcb-service (172.18.0.2:8070)===>Say Hello
- 使用 access token 通路 service b 接口
curl -i -H "Authorization: Bearer eac56504-c4f0-4706-b72e-3dc3acdf45e9" http://localhost:8060/svcb
傳回如下資料:
svcb-service (172.18.0.2:8070)===>Say Hello
- 使用 refresh token 重新整理 token
curl -X POST -vu client:secret http://localhost:8060/uaa/oauth/token -H "Accept: application/json" -d "grant_type=refresh_token&refresh_token=da1007dc-683c-4309-965d-370b15aa4aeb"
傳回更新後的 Token:
{
"access_token": "63ff57ce-f140-482e-ba7e-b6f29df35c88",
"token_type": "bearer",
"refresh_token": "da1007dc-683c-4309-965d-370b15aa4aeb",
"expires_in": 3599,
"scope": "read write"
}
- 重新整理配置
curl -X POST -vu user:password http://localhost:8888/bus/refresh
源碼下載下傳
https://github.com/souyunku/spring-boot-cloud.git