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

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: 本文介绍使用 Rainbond 快速部署 Spring Cloud Blade 微服务平台。Spring Cloud Blade 是一个由商业级项目升级优化而来的微服务架构,采用Spring Boot 2.7 、Spring Cloud 2021 等核心技术构建,完全遵循阿里巴巴编码规范。提供基于 React 和 Vue 的两个前端框架用于快速搭建企业级的 SaaS 多租户微服务平台。

微服务开发平台 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 完整部署的服务拓扑图 所示。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
7天前
|
Java 开发者 微服务
从单体到微服务:如何借助 Spring Cloud 实现架构转型
**Spring Cloud** 是一套基于 Spring 框架的**微服务架构解决方案**,它提供了一系列的工具和组件,帮助开发者快速构建分布式系统,尤其是微服务架构。
105 68
从单体到微服务:如何借助 Spring Cloud 实现架构转型
|
4天前
|
Java Nacos Sentinel
Spring Cloud Alibaba:一站式微服务解决方案
Spring Cloud Alibaba(简称SCA) 是一个基于 Spring Cloud 构建的开源微服务框架,专为解决分布式系统中的服务治理、配置管理、服务发现、消息总线等问题而设计。
87 12
Spring Cloud Alibaba:一站式微服务解决方案
|
7天前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
39 8
|
9天前
|
运维 监控 Java
后端开发中的微服务架构实践与挑战####
在数字化转型加速的今天,微服务架构凭借其高度的灵活性、可扩展性和可维护性,成为众多企业后端系统构建的首选方案。本文深入探讨了微服务架构的核心概念、实施步骤、关键技术考量以及面临的主要挑战,旨在为开发者提供一份实用的实践指南。通过案例分析,揭示微服务在实际项目中的应用效果,并针对常见问题提出解决策略,帮助读者更好地理解和应对微服务架构带来的复杂性与机遇。 ####
|
9天前
|
算法 NoSQL Java
微服务架构下的接口限流策略与实践#### 一、
本文旨在探讨微服务架构下,面对高并发请求时如何有效实施接口限流策略,以保障系统稳定性和服务质量。不同于传统的摘要概述,本文将从实际应用场景出发,深入剖析几种主流的限流算法(如令牌桶、漏桶及固定窗口计数器等),通过对比分析它们的优缺点,并结合具体案例,展示如何在Spring Cloud Gateway中集成自定义限流方案,实现动态限流规则调整,为读者提供一套可落地的实践指南。 #### 二、
26 3
|
8天前
|
消息中间件 运维 安全
后端开发中的微服务架构实践与挑战####
在数字化转型的浪潮中,微服务架构凭借其高度的灵活性和可扩展性,成为众多企业重构后端系统的首选方案。本文将深入探讨微服务的核心概念、设计原则、关键技术选型及在实际项目实施过程中面临的挑战与解决方案,旨在为开发者提供一套实用的微服务架构落地指南。我们将从理论框架出发,逐步深入至技术细节,最终通过案例分析,揭示如何在复杂业务场景下有效应用微服务,提升系统的整体性能与稳定性。 ####
24 1
|
9天前
|
XML 前端开发 安全
Spring MVC:深入理解与应用实践
Spring MVC是Spring框架提供的一个用于构建Web应用程序的Model-View-Controller(MVC)实现。它通过分离业务逻辑、数据、显示来组织代码,使得Web应用程序的开发变得更加简洁和高效。本文将从概述、功能点、背景、业务点、底层原理等多个方面深入剖析Spring MVC,并通过多个Java示例展示其应用实践,同时指出对应实践的优缺点。
31 2
|
9天前
|
监控 安全 持续交付
构建高效微服务架构:策略与实践####
在数字化转型的浪潮中,微服务架构凭借其高度解耦、灵活扩展和易于维护的特点,成为现代企业应用开发的首选。本文深入探讨了构建高效微服务架构的关键策略与实战经验,从服务拆分的艺术到通信机制的选择,再到容器化部署与持续集成/持续部署(CI/CD)的实践,旨在为开发者提供一套全面的微服务设计与实现指南。通过具体案例分析,揭示如何避免常见陷阱,优化系统性能,确保系统的高可用性与可扩展性,助力企业在复杂多变的市场环境中保持竞争力。 ####
27 2
|
9天前
|
消息中间件 运维 API
后端开发中的微服务架构实践####
本文深入探讨了微服务架构在后端开发中的应用,从其定义、优势到实际案例分析,全面解析了如何有效实施微服务以提升系统的可维护性、扩展性和灵活性。不同于传统摘要的概述性质,本摘要旨在激发读者对微服务架构深度探索的兴趣,通过提出问题而非直接给出答案的方式,引导读者深入
27 1
|
10天前
|
负载均衡 监控 API
后端开发中的微服务架构实践与挑战
本文深入探讨了微服务架构在后端开发中的应用,分析了其优势和面临的挑战,并通过案例分析提出了相应的解决策略。微服务架构以其高度的可扩展性和灵活性,成为现代软件开发的重要趋势。然而,它同时也带来了服务间通信、数据一致性等问题。通过实际案例的剖析,本文旨在为开发者提供有效的微服务实施指导,以优化系统性能和用户体验。