微服务开发平台Spring Cloud Blade部署实践
本文介绍使用 Rainbond[1] 快速部署 「Spring Cloud Blade」 微服务平台。Spring Cloud Blade 是一个由商业级项目升级优化而来的微服务架构,采用Spring Boot 2.7 、Spring Cloud 2021 等核心技术构建,完全遵循阿里巴巴编码规范。提供基于 React 和 Vue 的两个前端框架用于快速搭建企业级的 SaaS 多租户微服务平台。
关于 Spring Cloud Blade
采用前后端分离的模式,前端开源两个框架:Sword[2] (基于 React、Ant Design)、Saber[3] (基于 Vue、Element-UI) 后端采用SpringCloud全家桶,并同时对其基础组件做了高度的封装,单独开源出一个框架:BladeTool[4] 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[5] 版本部署。
一、部署 Nacos
通过开源应用商店部署 Nacos
,在开源应用商店中搜索 Nacos单机
并选择安装 2.1.2
版本。
二、部署 Redis
通过开源应用商店部署 Redis
,在开源应用商店中搜索 Redis
并选择安装 5.0.7
版本。
三、部署 Sentinel Dashboard
通过开源应用商店部署 Sentinel Dashboard
,在开源应用商店中搜索 Sentinel-Dashboard
并选择安装 1.8.6
版本。
四、初始化数据库
从开源应用商店安装的 Nacos
自带了 Mysql
组件,进入该组件中 -> 端口 -> 打开对外服务,通过客户端工具连接。
创建 blade
数据库。初始化表结构和数据:Blade SQL[6]
五、部署 Blade 后端服务
1.「基于源码创建组件,填写以下信息:」
内容 | |
---|---|
组件名称 | 自定义 |
组件英文名称 | 自定义 |
仓库地址 | https://gitee.com/smallc/SpringBlade |
代码版本: Tag | v3.5.0 |
2.「检测出多模块构建,进入多模块构建页面」
创建前,在多模块构建页面 -> 右侧修改按钮 -> 修改每个模块的启动命令,如下。 创建后,删除每个组件的默认端口,为每个组件添加对应的新端口和端口别名并打开端口的对内服务,如下。 修改完成后构建组件。
组件 | 端口 | 启动命令 |
---|---|---|
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
基于源码创建组件,填写以下信息:
内容 | |
---|---|
组件名称 | 自定义 |
组件英文名称 | 自定义 |
仓库地址 | https://gitee.com/zhangbigqi/Saber.git |
代码版本 | v3.5.0 |
进入 Saber
组件内 -> 端口 -> 删除默认端口,新增8080
端口并打开对外服务。编辑依赖关系,切换到 编排模式
拖动组件进行依赖关系建立,将Saber
依赖blade-gateway
并更新组件。使用默认域名访问 Saber UI
并登录。
部署完成后,如上图 「Spring Cloud Blade 完整部署的服务拓扑图」 所示。
Reference Link
Rainbond: https://www.rainbond.com/docs/micro-service/example/blade
[2]Sword: https://gitee.com/smallc/Sword
[3]Saber: https://gitee.com/smallc/Saber
[4]BladeTool: https://gitee.com/smallc/blade-tool
[5]Spring Cloud Blade v3.5.0: https://gitee.com/smallc/SpringBlade/tree/v3.5.0/
[6]Blade SQL: https://gitee.com/smallc/SpringBlade/blob/v3.5.0/doc/sql/blade/blade-saber-mysql.sql
END
点这里 ↓↓↓ 记得 关注✔ 标星⭐ 哦~
微信扫码关注该文公众号作者