小米 10 推送 MIUI 12.5.8.0 穩定版更新:修復結束通話電話後鎖屏資訊消失的問題等
HelloGitHub 推出的《講解開源專案》系列,今天給大家帶來一款基於 SpringCloud2.1 的微服務開發腳手開源專案——SpringCloud
專案原始碼地址:https://github.com/zhoutaoo/SpringCloud
一、微服務的簡介
微服務是可以獨立部署、水平擴充套件、獨立訪問的服務單元。Java 中常見最小的微服務單元就是基於 SpringBoot 框架的一個獨立專案。一個微服務只做一件事(單一職責),多個微服務組合才能稱之為一個完整的專案或產品。那麼多個微服務的就需要來管理,而 SpringCloud 就是統籌這些微服務的大管家。它是一系列有序框架的集合,簡單易懂、易部署易維護的分散式系統開發工具包。
今天介紹的開源專案就是基於 SpringCloud2.1 的腳手架,讓專案開發快速進入業務開發,而不需過多時間花費在架構搭建上,下面就讓我們一起來看看這個專案的使用吧。
二、專案結構
這裡以一個閘道器(gateway-admin)微服務來說明。
專案目錄結構如下圖:
目錄說明:
- db:專案初始化資料庫指令碼。
- docker:Docker 配置檔案目錄,將微服務打包為 docker 映象(image)。
- config:專案配置資訊目錄,包括資料庫配置,訊息轉化配置等。
- dao:資料庫操作目錄,主要對底層資料進行增刪查改。
- entity:專案實體類目錄。
- events:事件處理目錄。
- exception:異常處理目錄,通過面向切面處理全域性異常。
- rest:微服務控制器目錄,也就是對外提供的介面。
- service:微服務業務層目錄。
- GatewayAdminApplication:微服務 SpringBoot 入口類。
- resources:專案配置檔案目錄。
- test:專案單元測試目錄。
- pom.xml:maven 專案物件模型檔案。
三、實戰操作
3.1 前提
- 確保本地安裝 Git、Java8、Maven。
- 懂一些 SpringMVC 的知識,因為 SpringBoot 是基於 SpringMVC 演化而來的。
- 懂一些應用容器引擎 Docker、Docker-compose 的知識。
3.2 微服務架構說明
一個完整的專案,微服務架構一般包括下面這些服務:
- 註冊中心(常用的框架 Nacos、Eureka)
- 統一閘道器(常用的框架 Gateway、Zuul)
- 認證中心(常用技術實現方案 Jwt、OAuth)
- 分散式事務(常用的框架 Txlcn、Seata)
- 檔案服務
- 業務服務
3.3 執行專案
下面介紹了三種執行的方式:
第一種:一鍵執行
Linux 和 Mac 系統下可在專案根目錄下執行./install.sh
快速搭建開發環境。
第二種:本地環境執行
不推薦此方法,但還是簡單介紹下。
- 基礎環境安裝:mysql、redis,rabbitmq
2. 環境執行:
git clone https://github.com/zhoutaoo/SpringCloud.git #克隆專案
3. 安裝認證公共包到本地 maven 倉庫,執行如下命令:
cd common
mvn clean install #安裝認證公共包到本地 maven 倉庫
4. 安裝註冊中心 Nacos
- 下載Nacos
- 執行如下命令:
unzip nacos-server-0.9.0.zip OR tar -xvf nacos-server-0.9.0.tar.gz
cd nacos/bin
bash startup.sh -m standalone # Linux 啟動命令
cmd startup.cmd # Windows 啟動命令
5. 執行閘道器服務、認證服務、業務服務等
這裡以閘道器服務為例:執行GatewayAdminApplication.java
注意:認證服務(auth)、閘道器服務(gateway)、組織管理服務(sysadmin)需要執行資料庫初始化指令碼。
可通過 swager 介面:http://localhost:8445/swagger-ui.html 測試是否搭建成功,如果能正常訪問二手手游出售地圖表示服務啟動成功。
說明:
- application.yml 檔案主要配置 rabbitmq,redis, mysql 的連線資訊。
spring:
rabbitmq:
host: ${RABBIT_MQ_HOST:localhost}
port: ${RABBIT_MQ_PORT:5672}
username: ${RABBIT_MQ_USERNAME:guest}
password: ${RABBIT_MQ_PASSWORD:guest}
redis:
host: ${REDIS_HOST:localhost}
port: ${REDIS_PORT:6379}
#password: ${REDIS_PASSWORD:}
lettuce:
pool:
max-active: 300
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:${DATASOURCE_DBTYPE:mysql}://${DATASOURCE_HOST:localhost}:${DATASOURCE_PORT:3306}/sc_gateway?characterEncoding=UTF-8&useUnicode=true&useSSL=false
username: ${DATASOURCE_USERNAME:root}
password: ${DATASOURCE_PASSWORD:root123}
- bootstrap.yml 檔案主要配置服務基本資訊(埠,服務名稱),註冊中心地址等。
server:
port: ${SERVER_PORT:8445}
spring:
application:
name: gateway-admin
cloud:
nacos:
discovery:
server-addr: ${REGISTER_HOST:localhost}:${REGISTER_PORT:8848}
config:
server-addr: ${REGISTER_HOST:localhost}:${REGISTER_PORT:8848}
file-extension: yml
sentinel:
transport:
dashboard: ${SENTINEL_DASHBOARD_HOST:localhost}:${SENTINEL_DASHBOARD_PORT:8021}
第三種:Docker 環境執行
- 基礎環境安裝
- 通過 docker 命令安裝
# 安裝redis
docker run -p 6379:6379 --name redis -d docker.io/redis:latest --requirepass "123456"
# 安裝mysql
docker run --name mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root123 -d docker.io/mysql:5.7
# 安裝rabbitmq
docker run -d -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --name rabbitmq docker.io/rabbitmq:latest
- 也可以通過 docker-compose 命令安裝
cd docker-compose
docker-compose up -d #docker-compose 安裝mysql,redis,rabbitmq 服務
2. 下載專案到本地
git clone https://github.com/zhoutaoo/SpringCloud.git #克隆專案
3. 安裝認證公共包到本地 maven 倉庫執行如下命令:
cd common && mvn install #安裝認證公共包到本地maven倉庫
4. docker-compose 執行 Nacos
cd docker-compose
docker-compose -f docker-compose.yml -f docker-compose.nacos.yml up -d nacos #啟動註冊中心
5. 構建訊息中心映象
cd ./center/bus
mvn package && mvn docker:build
cd docker-compose
#啟動訊息中心
docker-compose -f docker-compose.yml -f docker-compose.center.yml up -d bus-server
需要構建映象的其他服務有:(注:操作和訊息中心映象構建方式類似)
- 閘道器管理服務 (gateway-admin、gateway-web)
- 組織服務(sysadmin/organization)
- 認證服務 (auth/authentication-server)
- 授權服務(auth authorization-server)
- 管理臺服務(monitor/admin)
3.4 執行效果
Nacos 服務中心
所有服務都正常啟動,在 nacos 管理中心可檢視,例項數表示執行此服務的個數,值為 1 可以理解為服務正常啟動。
檢視後臺服務
命令列執行:docker ps -a
檢視 docker 所有程序資訊
通過訪問微服務對外暴露的介面(swagger)檢測服務是否可用。
swager 介面地址:http://IP:port/swagger-ui.html
測試如下圖:
四、最後
微服務(SpringBoot、SpringCloud、Docker)現在吵得特別火,它並不是一門新的技術,而是在老技術的基礎上衍生出來的,增加了一些新的特性。
教程至此,你應該能夠通過 SpringCloud 這專案快速搭建微服務了。那麼就可以開始你的微服務學習之旅了,是時候更新一下自己的技能樹了,讓我們一起來學習微服務吧!
五、參考資料
- 本地安裝 Nacos
- nacos註冊中心的使用
- docker-compose教程
- Docker技術
『講解開源專案系列』——讓對開源專案感興趣的人不再畏懼、讓開源專案的發起者不再孤單。跟著我們的文章,你會發現程式設計的樂趣、使用和發現參與開源專案如此簡單。歡迎留言聯絡我們、加入我們,讓更多人愛上開源、貢獻開源~