「初學者商城」- 搭建基礎架構(接口)

1. 前言


接口主要給後臺管理系統和商城前端頁面提供數據。

項目使用SpringCloud搭建,其中,

有整合:MyBatis-PlusRedisMongoDBFlywayKafkaSwagger

有組件:EurekaHystrixTurbineGatewaySleuth

現在就先把這些技術整合在一起,並且讓它們運行起來。


2. 源碼


完整項目地址:https://github.com/intomylife/osc-api

v1.0 標籤地址:https://github.com/intomylife/osc-api/releases/tag/v1.0

v1.0 下載地址:ziptar.gz

注:對於標籤的說明「初學者商城」- 寫在最前面 #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-commonsosc-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:斷路器聚合監控中心
  • 有業務邏輯的工程會細分爲:apicoreapi中主要存放擴展實體類和常量類,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依賴。

在搭建基礎架構中,一共就兩個接口:

  1. /aUseB:主要測試服務間是否能互相調用
  2. /visit/toVisit:主要測試 Redis、MySQL、Kafka、MongoDB、Turbine,Sleuth 是否都能正常工作

想具體瞭解服務調用相關請前往:SpringCloud之服務註冊與發現Eureka+客戶端Feign

想具體瞭解整合 Redis相關請前往:SpringBoot整合Redis

想具體瞭解整合 MySQL相關請前往:SpringBoot整合MyBatis-Plus

想具體瞭解整合 Kafka相關請前往:SpringBoot整合Kafka

想具體瞭解整合 MongoDB相關請前往:SpringBoot整合MongoDB

還有兩個重要的成員:

  1. Flyway:數據庫版本管理工具
  2. 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.ymlturbine.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一致。(搭建本地開發環境的博客鏈接寫在了文末處)

由於這個版本是基礎架構(多環境是放到後續博客專門來寫的),導致這個版本的RedisMongoDB都配置了密碼連接,主要是爲了與這個版本對應的部署一致

所以這裏啓動的話得稍微改動一下:

Redis:

  1. 如果你本地的 Redis 本來就是有密碼啓動的,那就到redis.conf配置文件中更改密碼requirepass 123456789,然後讓 Redis 通過redis.conf配置文件重新啓動
  2. 如果你本地的 Redis 本來就是沒有密碼啓動的,那就在代碼中全局搜password: 123456789,更改爲password:

MongoDB:

  1. 如果你本地的 MongoDB 開啓了驗證,那就到mongodb.cfg配置文件中更改authorization: disabled,然後重新啓動 MongoDB
  2. 代碼中不用改,因爲 MongoDB 校驗沒有那麼嚴格,只要 MongoDB 服務端不需要密碼,那麼連接時帶不帶密碼都可以

6.2 啓動項目

注:在Maven Projects中添加osc-commons - pom.xmlosc-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-SERVICELOG-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超時問題,後續博客中會優化

這裏面做了哪些事情:

  1. 首先8000是訪問的網關服務
  2. 再看網關工程的配置文件(osc-gateway-service - application.yml)中的routes部分,會攔截/baseService/**開頭的請求,並且StripPrefix=1截取一位,最後請求被轉發到base-service服務
  3. 通過網關路由處理後的路徑就變爲了http://localhost:8000/aUseB,這時訪問的地址就被轉發到了基礎工程的前端控制器(osc-base-service - osc-base-service-core - AUseBFeignController.java)中的aUseB()方法
  4. aUseB()方法通過Feign調用了日誌工程的前端控制器(osc-log-service - osc-log-service-core - BSayHelloApi.java)中的b()方法
  5. 所以最後返回的內容是Hello!I'm b. port:8081

7.1.2 /visit/toVisit

訪問http://localhost:8000/baseService/visit/toVisit,正常的話會返回success

這裏面做了哪些事情:

  1. 經過上面同樣的路由,請求被轉發到http://localhost:8000/visit/toVisit,這時調用的是基礎工程的前端控制器(osc-base-service - osc-base-service-core - VisitController.java)中的toVisit()方法
  2. 此方法會分別插入一條數據到MySQLRedis
  3. 並且還會發送一條消息
  4. 發送的消息會被日誌工程的Kafka 監聽到(osc-log-service - osc-log-service-core - KafkaConsumer.java)
  5. 最後在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聚合在一起顯示

  1. 基礎工程:http://localhost:8080/swagger-ui.html

  2. 日誌工程:http://localhost:8081/swagger-ui.html

7.4 數據庫

7.4.1 Flyway

使用Navicat等圖形化工具連接本地MySQL,發現多了一個osc_db庫,目前裏面只有兩張表:

  1. flyway_schema_history是 Flyway 自動生成的,用來記錄版本信息的表
  2. visit是基礎工程的配置文件(osc-base-service - osc-base-service-core - resources - db.zwc)中的.sql腳本執行結果所產生的表,表裏還有剛剛訪問時插入的數據

8. 結語


整個項目能運行起來也算是成功的邁出了第一步。阿,快樂。


9. 相關文章


9.1 準備工作

「初學者商城」- 寫在最前面

9.2 搭建基礎架構

「初學者商城」- 搭建基礎架構(接口)  👀

「初學者商城」- 搭建基礎架構(後臺管理系統)

「初學者商城」- 搭建基礎架構(部署)

9.3 搭建本地開發環境

「初學者商城」- 搭建本地開發環境(JDK)

「初學者商城」- 搭建本地開發環境(Maven)

「初學者商城」- 搭建本地開發環境(Redis)

「初學者商城」- 搭建本地開發環境(MySQL)

「初學者商城」- 搭建本地開發環境(MongoDB)

「初學者商城」- 搭建本地開發環境(ZooKeeper)

「初學者商城」- 搭建本地開發環境(Kafka)


希望能夠幫助到你

over




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章