• 微服务开发平台 Spring Cloud Blade 部署实践


    本文介绍使用 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: smallchill@163.com
        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 完整部署的服务拓扑图 所示。

  • 相关阅读:
    Linux crontab 命令定时任务设置
    【华为OD机试真题 JS】找单词
    [ubuntu]ubuntu设置虚拟内存
    AIGC笔记--DDIM的简单实现
    postgresql用户和角色
    Linux帧缓冲注册OLED驱动
    图像处理之频域滤波DFT
    12.4-测试与质量保证 12.5-测试用例 12.6-测试策略 12.7-软件测试的原则 12.8-软件测试模型
    【python笔记】第二节 变量和数据类型
    【视觉SLAM十四讲学习笔记】第三讲——旋转矩阵
  • 原文地址:https://www.cnblogs.com/rainbond/p/16960229.html