1. 前言
接口主要給後臺管理系統和商城前端頁面提供數據。
項目使用SpringCloud
搭建,其中,
有整合:MyBatis-Plus、Redis、MongoDB、Flyway、Kafka、Swagger
有組件:Eureka、Hystrix、Turbine、Gateway、Sleuth
現在就先把這些技術整合在一起,並且讓它們運行起來。
2. 源碼
完整項目地址:https://github.com/intomylife/osc-api
v1.0 標籤地址:https://github.com/intomylife/osc-api/releases/tag/v1.0
注:對於標籤的說明「初學者商城」- 寫在最前面 #5.1
3. 環境
- JDK 1.8.0 +
- Maven 3.0 +
- SpringBoot 2.0.3
- SpringCloud Finchley.RELEASE
- Redis 4.0.14
- MySQL 5.7
- MongoDB 4.0.12
- Kafka 2.2.0
- Zookeeper 3.4.14
4. 工具
- IntelliJ IDEA
- Navicat Premium
5. 目錄結構
5.1 整體
整個接口源碼下載下來後,有兩個目錄:osc-commons
和osc-service
osc-api-1.0/
├── osc-commons
├── osc-service
└── README.md
- osc-commons:公用工程
- osc-service:服務工程
5.2 公用工程
放一些公用的配置,常量以及工具類等文件
osc-commons/
├── mvnw
├── mvnw.cmd
├── osc-commons.iml
├── pom.xml
└── src
└── main
├── java
│ └── com
│ └── zwc
│ └── core
│ ├── config
│ │ ├── MyBatisPlusConfig.java
│ │ ├── RedisConfig.java
│ │ └── SwaggerConfig.java
│ ├── constants
│ │ ├── KafkaConstants.java
│ │ ├── MongoDBConstants.java
│ │ └── RedisConstants.java
│ └── utils
│ ├── MongoDBClient.java
│ └── RedisClient.java
└── resources
└── config
└── system.properties
- core - config 目錄:初始化配置類
- constants 目錄:各種常量類
- utils 目錄:工具類
- resources - config:配置文件
5.3 服務工程
是一個父工程,裏面有很多子工程
osc-service/
├── osc-base-service
│ ├── osc-base-service-api
│ └── osc-base-service-core
├── osc-gateway-service
│ └── src
├── osc-log-service
│ ├── osc-log-service-api
│ └── osc-log-service-core
├── osc-registry-service
│ └── src
├── osc-sleuth-service
│ └── src
└── osc-turbine-service
└── src
- osc-base-service:基礎工程
- osc-gateway-service:網關
- osc-log-service:日誌工程
- osc-registry-service:註冊中心
- osc-sleuth-service:鏈路跟蹤監控中心
- osc-turbine-service:斷路器聚合監控中心
- 有業務邏輯的工程會細分爲:
api
和core
,api
中主要存放擴展實體類和常量類,core
中主要存放處理邏輯的核心代碼
5.3.1 註冊中心
osc-registry-service
工程作爲整個項目的註冊中心部分,其他項目都要把自己註冊進來。
註冊中心端口一般爲8761
。
加入spring-cloud-starter-netflix-eureka-server
依賴後,添加@EnableEurekaServer
註解就好,沒有太多配置就完成構建了。
5.3.2 網關
osc-gateway-service
工程作爲整個項目的網關入口,通過路由來匹配並調用不同的服務,還可以對請求進行限流及過濾操作。
網關端口我習慣設置爲8000
。
首先加入spring-cloud-starter-gateway
依賴表示自己是網關,然後再加入spring-cloud-starter-netflix-eureka-client
依賴 + @EnableEurekaClient
註解把自己註冊到註冊中心;由於網關中的限流操作是結合 Redis 來完成的,所以要加入spring-boot-starter-data-redis-reactive
依賴;網關這裏還做了熔斷操作,當要調用的服務還未啓動完成或者宕機時,會進行熔斷防止用戶看到系統異常,所以也要加入spring-cloud-starter-netflix-hystrix
依賴;最後,每次請求到網關後又被網關轉發到哪些服務需要通過 Zipkin 記錄下來,所以加入了spring-cloud-starter-zipkin
依賴。
想具體瞭解Gateway 組件
相關請前往:SpringCloud之服務網關Gateway
5.3.3 業務工程
osc-base-service
工程和osc-log-service
工程都是專門處理業務邏輯的工程。
首先,這兩個工程都加入了只有處理業務的工程才需要的osc-commons
依賴;然後再加入spring-cloud-starter-netflix-eureka-client
依賴 + @EnableEurekaClient
註解把自己註冊到註冊中心;還加入了服務之間調用需要的spring-cloud-starter-openfeign
依賴;處理業務的工程當然也需要熔斷,所以加入spring-cloud-starter-netflix-hystrix
依賴;最後,服務之間的調用鏈路同樣要被 Zipkin 記錄下來,所以也加入了spring-cloud-starter-zipkin
依賴。
在搭建基礎架構中,一共就兩個接口:
/aUseB
:主要測試服務間是否能互相調用/visit/toVisit
:主要測試 Redis、MySQL、Kafka、MongoDB、Turbine,Sleuth 是否都能正常工作
想具體瞭解服務調用
相關請前往:SpringCloud之服務註冊與發現Eureka+客戶端Feign
想具體瞭解整合 Redis
相關請前往:SpringBoot整合Redis
想具體瞭解整合 MySQL
相關請前往:SpringBoot整合MyBatis-Plus
想具體瞭解整合 Kafka
相關請前往:SpringBoot整合Kafka
想具體瞭解整合 MongoDB
相關請前往:SpringBoot整合MongoDB
還有兩個重要的成員:
Flyway
:數據庫版本管理工具Swagger
:Api 文檔管理工具
想具體瞭解整合 Flyway
相關請前往:SpringBoot整合Flyway
想具體瞭解整合 Swagger
相關請前往:SpringBoot整合Swagger
5.3.4 斷路器聚合監控中心
osc-turbine-service
工程會把指定工程的熔斷監控全部收集在一起顯示。
首先加入spring-cloud-netflix-turbine
依賴 + @EnableTurbine
註解表示自己是斷路器聚合監控中心,然後再加入spring-cloud-starter-netflix-eureka-client
依賴 + @EnableEurekaClient
註解把自己註冊到註冊中心;哪些工程會被聚合在一起顯示,在配置文件application.yml
中turbine.app-config
處指定。
想具體瞭解Turbine 組件
相關請前往:SpringCloud之監控數據聚合Turbine
5.3.5 鏈路跟蹤監控中心
osc-sleuth-service
工程與註冊中心類似,都是有需要就得把自己註冊進來。
鏈路跟蹤監控中心端口一般爲9411
。
加入zipkin-server
依賴 + @EnableZipkinServer
註解表示自己是鏈路跟蹤監控中心,然後再加入spring-cloud-starter-netflix-eureka-client
依賴 + @EnableEurekaClient註解把自己註冊到註冊中心;只有加入了spring-cloud-starter-zipkin
依賴的工程纔會被監控到,如上面的網關和業務工程。
想具體瞭解Sleuth 組件
相關請前往:SpringCloud之鏈路跟蹤Sleuth
6. 啓動
注:最好不要下載最新的代碼,爲了保證效果一致,請下載v1.0
標籤的代碼
6.1 環境準備
注:搭建本地開發環境的博客後續會補上,這裏先默認環境已經與上面#3
一致。(搭建本地開發環境的博客鏈接寫在了文末處)
由於這個版本是基礎架構(多環境是放到後續博客專門來寫的),導致這個版本的Redis
和MongoDB
都配置了密碼連接,主要是爲了與這個版本對應的部署
一致
所以這裏啓動的話得稍微改動一下:
Redis:
- 如果你本地的 Redis 本來就是有密碼啓動的,那就到
redis.conf
配置文件中更改密碼requirepass 123456789
,然後讓 Redis 通過redis.conf
配置文件重新啓動 - 如果你本地的 Redis 本來就是沒有密碼啓動的,那就在代碼中全局搜
password: 123456789
,更改爲password:
MongoDB:
- 如果你本地的 MongoDB 開啓了驗證,那就到
mongodb.cfg
配置文件中更改authorization: disabled
,然後重新啓動 MongoDB - 代碼中不用改,因爲 MongoDB 校驗沒有那麼嚴格,只要 MongoDB 服務端不需要密碼,那麼連接時帶不帶密碼都可以
6.2 啓動項目
注:在Maven Projects
中添加osc-commons - pom.xml
和osc-service - pom.xml
6.2.1 OscRegistryServiceApplication
項目啓動成功後訪問http://localhost:8761/
即可看到註冊中心主頁面
6.2.2 OscGatewayServiceApplication
項目啓動成功後刷新http://localhost:8761/
即可看到 GATEWAY-SERVICE 服務註冊成功
6.2.3 OscBaseServiceCoreApplication && OscLogServiceCoreApplication
項目都啓動成功後刷新http://localhost:8761/
即可看到 BASE-SERVICE 和 LOG-SERVICE 服務都註冊成功
6.2.4 OscTurbineServiceApplication
項目啓動成功後訪問http://localhost:8762/hystrix
即可看到斷路器聚合監控中心主頁面,在最長的輸入框中輸入http://localhost:8762/turbine.stream
後,點擊 Monitor Stream 按鈕可以看到兩個'Loading …’
,因爲此時還未調用服務
刷新http://localhost:8761/
即可看到 TURBINE-SERVICE 服務註冊成功
6.2.5 OscSleuthServiceApplication
項目啓動成功後訪問http://localhost:9411
即可看到鏈路跟蹤監控中心主頁面
刷新http://localhost:8761/
即可看到 SLEUTH-ZIPKIN-SERVICE 服務註冊成功
7. 驗證
7.1 業務接口
7.1.1 /aUseB
訪問http://localhost:8000/baseService/aUseB
,正常的話會返回Hello!I'm b. port:8081
;如果返回的是I'm Spring Cloud Gateway fallback.
那麼再刷新一次,這裏是因爲Hystrix
超時問題,後續博客中會優化
這裏面做了哪些事情:
- 首先
8000
是訪問的網關服務 - 再看網關工程的配置文件(osc-gateway-service - application.yml)中的
routes
部分,會攔截/baseService/**
開頭的請求,並且StripPrefix=1
截取一位,最後請求被轉發到base-service
服務 - 通過網關路由處理後的路徑就變爲了
http://localhost:8000/aUseB
,這時訪問的地址就被轉發到了基礎工程的前端控制器(osc-base-service - osc-base-service-core - AUseBFeignController.java)中的aUseB()
方法 aUseB()
方法通過Feign
調用了日誌工程的前端控制器(osc-log-service - osc-log-service-core - BSayHelloApi.java)中的b()
方法- 所以最後返回的內容是
Hello!I'm b. port:8081
7.1.2 /visit/toVisit
訪問http://localhost:8000/baseService/visit/toVisit
,正常的話會返回success
這裏面做了哪些事情:
- 經過上面同樣的路由,請求被轉發到
http://localhost:8000/visit/toVisit
,這時調用的是基礎工程的前端控制器(osc-base-service - osc-base-service-core - VisitController.java)中的toVisit()
方法 - 此方法會分別插入一條數據到
MySQL
和Redis
中 - 並且還會發送一條消息
- 發送的消息會被日誌工程的
Kafka 監聽
到(osc-log-service - osc-log-service-core - KafkaConsumer.java) - 最後在
OscLogServiceCoreApplication
的控制檯會打印類似於KafkaConsumer ---> receiveTopicMessage:{"createDatetime":1577771121680,"sessionId":"6E45447B2F2A0F62CBEF9EFBF6DF121D","updateDatetime":1577771121680}
這樣的信息
7.1.3 限流
快速刷新(多次訪問)http://localhost:8000/baseService/aUseB
,瀏覽器會顯示HTTP ERROR 429
等信息
7.2 監控
7.2.1 turbine
回到http://localhost:8762/hystrix/monitor?stream=http://localhost:8762/turbine.stream
,發現兩個’Loading …’
消失,顯示的是每個接口的調用情況
7.2.2 sleuth
訪問http://localhost:9411/zipkin
後,點擊 Find Traces 藍色按鈕,會顯示每個請求的請求時長等信息,點擊其中一條,可以看到更詳細的請求信息
訪問http://localhost:9411/zipkin/dependency/
,可以看到請求依賴關係圖
7.3 文檔
7.3.1 Swagger
注:後續會把Swagger
聚合在一起顯示
-
基礎工程:
http://localhost:8080/swagger-ui.html
-
日誌工程:
http://localhost:8081/swagger-ui.html
7.4 數據庫
7.4.1 Flyway
使用Navicat
等圖形化工具連接本地MySQL
,發現多了一個osc_db
庫,目前裏面只有兩張表:
flyway_schema_history
是 Flyway 自動生成的,用來記錄版本信息的表visit
是基礎工程的配置文件(osc-base-service - osc-base-service-core - resources - db.zwc)中的.sql
腳本執行結果所產生的表,表裏還有剛剛訪問時插入的數據
8. 結語
整個項目能運行起來也算是成功的邁出了第一步。阿,快樂。
9. 相關文章
9.1 準備工作
9.2 搭建基礎架構
9.3 搭建本地開發環境
希望能夠幫助到你
over