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

news2024/9/21 22:53:20

本文介绍使用 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
代码版本: Tagv3.5.0

2.检测出多模块构建,进入多模块构建页面

  1. 创建前,在多模块构建页面 -> 右侧修改按钮 -> 修改每个模块的启动命令,如下。
  2. 创建后,删除每个组件的默认端口,为每个组件添加对应的新端口和端口别名并打开端口的对内服务,如下。
  3. 修改完成后构建组件。
组件端口启动命令
blade-auth8100web: java $JAVA_OPTS -jar blade-auth/target/blade-auth.jar
blade-gateway80web: java $JAVA_OPTS -jar blade-gateway/target/blade-gateway.jar
blade-admin7002web: java $JAVA_OPTS -jar blade-ops/blade-admin/target/blade-admin.jar
blade-develop7007web: java $JAVA_OPTS -jar blade-ops/blade-develop/target/blade-develop.jar
blade-report8108web: java $JAVA_OPTS -jar blade-ops/blade-report/target/blade-report.jar
blade-resource8010web: java $JAVA_OPTS -jar blade-ops/blade-resource/target/blade-resource.jar
blade-swagger18000web: java $JAVA_OPTS -jar blade-ops/blade-swagger/target/blade-swagger.jar
blade-desk8105web: java $JAVA_OPTS -jar blade-service/blade-desk/target/blade-desk.jar
blade-log8103web: java $JAVA_OPTS -jar blade-service/blade-log/target/blade-log.jar
blade-system8106web: java $JAVA_OPTS -jar blade-service/blade-system/target/blade-system.jar
blade-user8102web: 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 完整部署的服务拓扑图 所示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68044.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

自定义RBAC(2)

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~ 上一次把DAC、MAC、PBAC这三个都一口气介绍完了,本想一口气把RBAC也说完。想了想,饭还是要一口口吃,一次吃太多会消化不良&am…

Python | 今年世界杯哪个队最有可能夺冠?!

文章目录🏳️‍🌈 1. 数据🏳️‍🌈 2. 绘图2.1 绘制南丁格尔玫瑰图2.2 设置cloor_bar2.3 添加文字2.4 添加注释2.5 添加标题2.6 词云🏳️‍🌈 3. 更多可视化项目源码数据大家好,我是 &#x1f4…

Sqoop数据导出 第1关:Sqoop数据导出语法学习

为了完成本关任务,你需要掌握: 1、Sqoop 导出( export )的基本参数。 2、配置环境。 Sqoop 导出( export )的基本参数。 Sqoop 能够让 Hadoop 上的 HDFS 和 Hive 跟关系型数据库之间进行数据导入与导出,多亏了import和export这两个工具。本…

【Tensorflow+自然语言处理+RNN】实现中文译英文的智能聊天机器人实战(附源码和数据集 超详细)

需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 一、序列-序列机制概述 Seq2Seq 是一个 Encoder-Decoder 结构的神经网络,它的输入是一个序列(Sequence),输出也是一个序列(Sequence)。在 Encoder 中,将可变长度的序列转变为固定长度的向…

【RCNN系列】Fast RCNN论文总结

目标检测论文总结 【RCNN系列】 RCNN Fast RCNN 文章目录目标检测论文总结前言一、Pipeline二、模型设计1.改进点2.RoI pooling layer3.Backbone初始化4.采样策略5.损失函数6.其他小细节三、总结前言 一些经典论文的总结。 一、Pipeline 利用Selective Search(比较…

Unity——通过点击鼠标进行场景切换

前记 通过点击按钮进行场景切换请参考: unity——通过点击按钮进行场景切换_行秋的博客-CSDN博客1.准备两个示例场景 2.点击File—>Build Settings...,将场景添加到视图中,点击Build。选择文件夹进行保存。(建议将文件打包到…

linux命令二

12.whoami,whereis,which,id //whoami:确认自己身份 //whereis:查询命令所在目录以及帮助文档所在目录 //which:查询该命令所在目录(类似whereis) //id:打印出自己的UID以及GID。(UID:用户身份唯一标识。GID:用户组身份唯一标识。每一个用…

程序人生——css绘制世界杯足球场

写在之前的话 花有重开日,人无再少年。 疯狂无大小,热爱即疯狂! 足球⚽️,是我大学时期的一门选修课,足球需要场地,场地绘制现在就开始!!! 四年一次的世界杯再卡塔尔进行…

电影院网站设计毕业设计,电影院网站的设计与实现,电影院售票系统源码毕设作品参考

项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于web网页的电影院购票选座系统,整个网站项目使用了B/S架构,基于python的Django框架下开发;管理员通过后台录入信息、管理信息,设置网站信息,管理…

KBPC1010-ASEMI液压升降装置方案整流桥10A 1000V

编辑-Z KBPC1010在KBPC-4封装里采用的4个芯片,其尺寸都是100MIL,是一款10A 1000V液压升降装置方案整流桥。KBPC1010的浪涌电流Ifsm为200A,漏电流(Ir)为10uA,其工作时耐温度范围为-65~150摄氏度。KBPC1010采用光阻GPP芯片材质&…

用R语言模拟混合制排队随机服务排队系统

M / M / 1系统 该系统的基本参数:: 使用M / M / 1系统进行仿真非常简单 。 lambda <- 2 mu <- 4 rho <- lambda/mu # 2/4 ..例如&#xff0c; 可以快速可视化随时间变化的资源使用情况。在下面&#xff0c;我们可以看到仿真如何收敛到系统中理论上的平均客户数。 …

单点部署linux命令----linux命令 总结篇

java -jar XXX.jar nohup java -jar xxx.jar & nohup java -jar visual_map-1.0.0.jar >/log/log.txt 2>&1 & nohup java -jar visual_map-1.0.0.jar & nohup java -jar_C18298182575的博客-CSDN博客 java -jar后台启动的四种方式_普通网友的博客-CSD…

基于JavaWeb的大学迎新系统设计与实现(源码+数据库脚本+论文+开题报告)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

NLP命名实体识别

命名实体识别&#xff08;Named Entity Recognition&#xff0c; NER&#xff09;是指在文本中识别出特殊对象&#xff0c;如人、地点、组织机构等。 命名实体识别方法概述 基于规则的方法&#xff1a;利用专家手工制订的规则进行命名实体识别。举例&#xff1a;“赵某出生于…

【动态规划】独立任务最优调度问题

1.题目描述 2.算法思路 我认为做动态规划题的关键是找到一个合适的dp数组&#xff0c;确定它dp[i][j]的含义&#xff0c;用它和题目的最优子结构性质结合求解。具体思路如下&#xff1a; (笔记些许潦草hhh…) 1.dp[i][j]表示第i个作业在第j&#xff08;0-A,1-B&#xff09;台…

Keil setting issue

1, data type default issue caused enter “hard fault during debug” void HardFault_Handler(void) { /* if Hard Fault exception occurs, go to infinite loop */ if(CoreDebug->DHCSR & 1) {//check c DEBUGEN 1 -> Debugger connected __breakpoint(0); //…

小迪-day12(SQL注入简要概述)

1、相关sql函数、语句 1.1 count() 1.1.1 count(column_name) ​ count(column_name)是计算数据库表中指定列有多少行&#xff0c; ​ 例&#xff1a; SELECT COUNT(column_name) FROM table_name1.1.2 count(*) 可以计算表中有多少行&#xff08;有多少条数据&#xff0…

基于 docker 搭建 grafana+prometheus 监控资源之mysql+docker+alertmanager配置(二)(超详细版)

先去看第一篇&#xff08;基础部署篇&#xff09;&#xff0c;看完后&#xff0c;才能接上本篇。 基于 docker 搭建 grafanaprometheus 监控资源之mysqldockeralertmanager配置&#xff08;二&#xff09;环境信息服务基本信息一、安装Mysqld_exporter1.1 标准启动1.2 docker-c…

1554_AURIX_TC275_时钟监控功能以及时钟紧急行为

全部学习汇总&#xff1a; GreyZhang/g_TC275: happy hacking for TC275! (github.com) 这部分还是前面CCU寄存器的一些延续&#xff0c;寄存器支持模块的禁用、禁用状态的查询以及是否支持休眠的控制。 1. 时钟监控是时钟进行安全设计需要考虑的一个手段&#xff0c;支持两种锁…