微服務開發平台 Spring Cloud Blade 部署實踐

語言: CN / TW / HK

本文介紹使用 Rainbond 快速部署 Spring Cloud Blade 微服務平台。Spring Cloud Blade 是一個由商業級項目升級優化而來的微服務架構,採用Spring Boot 2.7 、Spring Cloud 2021 等核心技術構建,完全遵循阿里巴巴編碼規範。提供基於 React 和 Vue 的兩個前端框架用於快速搭建企業級的 SaaS 多租户微服務平台。

關於 Spring Cloud Blade

  • 採用前後端分離的模式,前端開源兩個框架:Sword (基於 React、Ant Design)、Saber (基於 Vue、Element-UI)
  • 後端採用SpringCloud全家桶,並同時對其基礎組件做了高度的封裝,單獨開源出一個框架:BladeTool
  • BladeTool 已推送至Maven中央庫,直接引入即可,減少了工程的臃腫,也可更注重於業務開發
  • 集成Sentinel從流量控制、熔斷降級、系統負載等多個維度保護服務的穩定性。
  • 註冊中心、配置中心選型Nacos,為工程瘦身的同時加強各模塊之間的聯動。
  • 極簡封裝了多租户底層,用更少的代碼換來拓展性更強的SaaS多租户系統。
  • 借鑑OAuth2,實現了多終端認證系統,可控制子系統的token權限互相隔離。
  • 借鑑Security,封裝了Secure模塊,採用JWT做Token認證,可拓展集成Redis等細顆粒度控制方案。
  • 項目分包明確,規範微服務的開發模式,使包與包之間的分工清晰。

模塊説明

SpringBlade
├── blade-auth -- 授權服務提供
├── blade-common -- 常用工具封裝包
├── blade-gateway -- Spring Cloud 網關
├── blade-ops -- 運維中心
├    ├── blade-admin -- spring-cloud後台管理
├    ├── blade-develop -- 代碼生成
├    ├── blade-resource -- 資源管理
├    ├── blade-seata-order -- seata分佈式事務demo
├    ├── blade-seata-storage -- seata分佈式事務demo
├── blade-service -- 業務模塊
├    ├── blade-desk -- 工作台模塊 
├    ├── blade-log -- 日誌模塊 
├    ├── blade-system -- 系統模塊 
├    └── blade-user -- 用户模塊 
├── blade-service-api -- 業務模塊api封裝
├    ├── blade-desk-api -- 工作台api 
├    ├── blade-dict-api -- 字典api 
├    ├── blade-system-api -- 系統api 
└──  └── blade-user-api -- 用户api 

Spring Cloud Blade 完整部署的服務拓撲圖

基於應用商店快速部署 Spring Cloud Blade

通過開源應用商店部署 Spring Cloud Blade,在 平台管理 -> 應用市場 -> 開源應用商店 中搜索 SpringBlade 並一鍵安裝。

部署完成後,如上圖 Spring Cloud Blade 完整部署的服務拓撲圖 所示。

基於源碼部署 Spring Cloud Blade

本篇文章基於 Spring Cloud Blade v3.5.0 版本部署。

一、部署 Nacos

通過開源應用商店部署 Nacos,在開源應用商店中搜索 Nacos單機 並選擇安裝 2.1.2 版本。

二、部署 Redis

通過開源應用商店部署 Redis,在開源應用商店中搜索 Redis 並選擇安裝 5.0.7 版本。

三、部署 Sentinel Dashboard

通過開源應用商店部署 Sentinel Dashboard,在開源應用商店中搜索 Sentinel-Dashboard 並選擇安裝 1.8.6 版本。

四、初始化數據庫

從開源應用商店安裝的 Nacos 自帶了 Mysql 組件,進入該組件中 -> 端口 -> 打開對外服務,通過客户端工具連接。

  1. 創建 blade 數據庫。
  2. 初始化表結構和數據:Blade SQL

五、部署 Blade 後端服務

1.基於源碼創建組件,填寫以下信息:

內容
組件名稱 自定義
組件英文名稱 自定義
倉庫地址 https://gitee.com/smallc/SpringBlade
代碼版本: Tag v3.5.0

2.檢測出多模塊構建,進入多模塊構建頁面

  1. 創建前,在多模塊構建頁面 -> 右側修改按鈕 -> 修改每個模塊的啟動命令,如下。
  2. 創建後,刪除每個組件的默認端口,為每個組件添加對應的新端口和端口別名並打開端口的對內服務,如下。
  3. 修改完成後構建組件。
組件 端口 啟動命令
blade-auth 8100 web: java $JAVA_OPTS -jar blade-auth/target/blade-auth.jar
blade-gateway 80 web: java $JAVA_OPTS -jar blade-gateway/target/blade-gateway.jar
blade-admin 7002 web: java $JAVA_OPTS -jar blade-ops/blade-admin/target/blade-admin.jar
blade-develop 7007 web: java $JAVA_OPTS -jar blade-ops/blade-develop/target/blade-develop.jar
blade-report 8108 web: java $JAVA_OPTS -jar blade-ops/blade-report/target/blade-report.jar
blade-resource 8010 web: java $JAVA_OPTS -jar blade-ops/blade-resource/target/blade-resource.jar
blade-swagger 18000 web: java $JAVA_OPTS -jar blade-ops/blade-swagger/target/blade-swagger.jar
blade-desk 8105 web: java $JAVA_OPTS -jar blade-service/blade-desk/target/blade-desk.jar
blade-log 8103 web: java $JAVA_OPTS -jar blade-service/blade-log/target/blade-log.jar
blade-system 8106 web: java $JAVA_OPTS -jar blade-service/blade-system/target/blade-system.jar
blade-user 8102 web: java $JAVA_OPTS -jar blade-service/blade-user/target/blade-user.jar

3.編輯依賴關係,切換到 編排模式 拖動組件進行依賴關係建立。

4.進入 Nacos 組件內 -> 端口 -> 打開 8848 端口的對外服務,訪問 Nacos 並登錄,默認用户密碼 nacos/nacos,創建配置文件。

創建 blade.yaml 配置文件,內容如下:

#服務器配置
server:
  undertow:
    # 以下的配置會影響buffer,這些buffer會用於服務器連接的IO操作,有點類似netty的池化內存管理
    buffer-size: 1024
    # 是否分配的直接內存
    direct-buffers: true
    # 線程配置
    threads:
      # 設置IO線程數, 它主要執行非阻塞的任務,它們會負責多個連接, 默認設置每個CPU核心一個線程
      io: 16
      # 阻塞任務線程池, 當執行類似servlet請求阻塞操作, undertow會從這個線程池中取得線程,它的值設置取決於系統的負載
      worker: 400

#spring配置
spring:
  cloud:
    sentinel:
      eager: true
  devtools:
    restart:
      log-condition-evaluation-delta: false
    livereload:
      port: 23333

#feign配置
feign:
  sentinel:
    enabled: true
  okhttp:
    enabled: true
  httpclient:
    enabled: false

#對外暴露端口
management:
  endpoints:
    web:
      exposure:
        include: "*"
  endpoint:
    health:
      show-details: always

#knife4j配置
knife4j:
  #啟用
  enable: true
  #基礎認證
  basic:
    enable: false
    username: blade
    password: blade
  #增強配置
  setting:
    enableSwaggerModels: true
    enableDocumentManage: true
    enableHost: false
    enableHostText: http://localhost
    enableRequestCache: true
    enableFilterMultipartApis: false
    enableFilterMultipartApiMethodType: POST
    language: zh-CN
    enableFooter: false
    enableFooterCustom: true
    footerCustomContent: Copyright © 2022 SpringBlade All Rights Reserved

#swagger配置信息
swagger:
  title: SpringBlade 接口文檔系統
  description: SpringBlade 接口文檔系統
  version: 3.5.0
  license: Powered By SpringBlade
  licenseUrl: https://bladex.vip
  terms-of-service-url: https://bladex.vip
  contact:
    name: smallchill
    email: [email protected]
    url: https://gitee.com/smallc

#blade配置
blade:
  token:
    sign-key: 請配置32位簽名提高安全性
  xss:
    enabled: true
    skip-url:
      - /weixin
  secure:
    skip-url:
      - /test/**
    client:
      - client-id: sword
        path-patterns:
          - /sword/**
      - client-id: saber
        path-patterns:
          - /saber/**
  tenant:
    column: tenant_id
    tables:
      - blade_notice

創建 blade-dev.yaml 配置文件,內容如下:

#spring配置
spring:
  redis:
    ##redis 單機環境配置
    host: 127.0.0.1
    port: 6379
    password:
    database: 0
    ssl: false

#項目模塊集中配置
blade:
  #通用開發生產環境數據庫地址(特殊情況可在對應的子工程裏配置覆蓋)
  datasource:
    dev:
      url: jdbc:mysql://127.0.0.1:3306/blade?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&tinyInt1isBit=false&allowMultiQueries=true&serverTimezone=GMT%2B8
      username: root
      password: root

更新或重啟除 Nacos Mysql Redis Sentinel Dashboard 之外的所有組件。

六、部署 Blade 前端 Saber

  1. 基於源碼創建組件,填寫以下信息:
內容
組件名稱 自定義
組件英文名稱 自定義
倉庫地址 https://gitee.com/zhangbigqi/Saber.git
代碼版本 v3.5.0
  1. 進入 Saber 組件內 -> 端口 -> 刪除默認端口,新增 8080 端口並打開對外服務。
  2. 編輯依賴關係,切換到 編排模式 拖動組件進行依賴關係建立,將 Saber 依賴 blade-gateway 並更新組件。
  3. 使用默認域名訪問 Saber UI 並登錄。

部署完成後,如上圖 Spring Cloud Blade 完整部署的服務拓撲圖 所示。