1. 程式人生 > 其它 >基於 Spring Cloud 完整的微服務架構實戰

基於 Spring Cloud 完整的微服務架構實戰

基於 Spring Cloud 完整的微服務架構實戰

本專案是一個基於 Spring Boot、Spring Cloud、Spring Oauth2 和 Spring Cloud Netflix 等框架構建的微服務專案。

@作者:Sheldon 地址:https://github.com/zhangxd1989

技術棧

  • 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 快速啟動
    1. 配置 Docker 環境
    2. mvn clean package 打包專案及 Docker 映象
    3. 在專案根目錄下執行 docker-compose up -d 啟動所有專案
  • 本地手動啟動
    1. 配置 rabbitmq
    2. 修改 hosts 將主機名指向到本地 127.0.0.1 registry config monitor rabbitmq auth-service 或者修改各服務配置檔案中的相應主機名為本地 ip
    3. 啟動 registry、config、monitor、zipkin
    4. 啟動 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)

介面測試

  1. 獲取 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" }
  2. 使用 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
  3. 使用 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
  4. 使用 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" }
  5. 重新整理配置 curl -X POST -vu user:password http://localhost:8888/bus/refresh 原始碼下載

https://github.com/souyunku/spring-boot-cloud.git

Contact

  • 作者:鵬磊
  • 出處:http://www.ymq.io
  • Email:[email protected]
  • 版權歸作者所有,轉載請註明出處
  • Wechat:關注公眾號,搜雲庫,專注於開發技術的研究與知識分享