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


技術棧

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 環境

mvn clean package 打包項目及 Docker 鏡像

在項目根目錄下執行 docker-compose up -d 啟動所有項目

本地手動啟動

配置 rabbitmq

修改 hosts 將主機名指向到本地

127.0.0.1 registry config monitor rabbitmq auth-service

或者修改各服務配置文件中的相應主機名為本地 ip

啟動 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)

接口測試

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM