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

2022-12-06 21:00:51

本文介紹使用 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 完整部署的服務拓撲圖 所示。